JavaWeb - Excel/Word(2003/2007、上传/下载、解析/生成、导入/导出)

简介: JavaWeb - Excel/Word(2003/2007、上传/下载、解析/生成、导入/导出)

1.案例分析

image.png

2.技术说明

image.png

image.png

image.png

image.png

Ps:导出Word还需要关注一个“格式”的问题,否则就没必要用Word了,直接txt更方便。

image.png

3.代码流程

image.pngimage.pngimage.pngimage.png

4.效果图

image.pngimage.png

image.png

image.png

5.项目结构图

image.png

6.共享代码

// web.xml<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1"><servlet><servlet-name>indexServlet</servlet-name><servlet-class>org.imooc.servlet.IndexServlet</servlet-class></servlet><servlet-mapping><servlet-name>indexServlet</servlet-name><url-pattern>/index</url-pattern></servlet-mapping><servlet><servlet-name>importExcelInit</servlet-name><servlet-class>org.imooc.servlet.ImportExcelInitServlet</servlet-class></servlet><servlet-mapping><servlet-name>importExcelInit</servlet-name><url-pattern>/importExcelInit</url-pattern></servlet-mapping><servlet><servlet-name>importExcel</servlet-name><servlet-class>org.imooc.servlet.ImportExcelServlet</servlet-class></servlet><servlet-mapping><servlet-name>importExcel</servlet-name><url-pattern>/importExcel</url-pattern></servlet-mapping><servlet><servlet-name>exportExcelInit</servlet-name><servlet-class>org.imooc.servlet.ExportExcelInitServlet</servlet-class></servlet><servlet-mapping><servlet-name>exportExcelInit</servlet-name><url-pattern>/exportExcelInit</url-pattern></servlet-mapping><servlet><servlet-name>exportExcel</servlet-name><servlet-class>org.imooc.servlet.ExportExcelServlet</servlet-class></servlet><servlet-mapping><servlet-name>exportExcel</servlet-name><url-pattern>/exportExcel</url-pattern></servlet-mapping><servlet><servlet-name>importWordInit</servlet-name><servlet-class>org.imooc.servlet.ImportWordInitServlet</servlet-class></servlet><servlet-mapping><servlet-name>importWordInit</servlet-name><url-pattern>/importWordInit</url-pattern></servlet-mapping><servlet><servlet-name>importWord</servlet-name><servlet-class>org.imooc.servlet.ImportWordServlet</servlet-class></servlet><servlet-mapping><servlet-name>importWord</servlet-name><url-pattern>/importWord</url-pattern></servlet-mapping><servlet><servlet-name>exportWordInit</servlet-name><servlet-class>org.imooc.servlet.ExportWordInitServlet</servlet-class></servlet><servlet-mapping><servlet-name>exportWordInit</servlet-name><url-pattern>/exportWordInit</url-pattern></servlet-mapping><servlet><servlet-name>exportWord</servlet-name><servlet-class>org.imooc.servlet.ExportWordServlet</servlet-class></servlet><servlet-mapping><servlet-name>exportWord</servlet-name><url-pattern>/exportWord</url-pattern></servlet-mapping><jsp-config><jsp-property-group><url-pattern>*.jsp</url-pattern><include-prelude>/WEB-INF/jsp/common.jsp</include-prelude></jsp-property-group></jsp-config></web-app>
// common.jsp<%StringbasePath=request.getScheme() +"://"+request.getServerName() +":"+request.getServerPort() +request.getContextPath();
request.setAttribute("basePath", basePath);
%>
// index.jsp<divclass="ileft"id="menuDiv"><h3onclick="clickSecondMenu(this,'${basePath}/importExcelInit')"><a>导入Excel</a></h3><h3onclick="clickSecondMenu(this,'${basePath}/exportExcelInit')"><a>导出Excel</a></h3><h3onclick="clickSecondMenu(this,'${basePath}/importWordInit')"><a>导入Word</a></h3><h3onclick="clickSecondMenu(this,'${basePath}/exportWordInit')"><a>导出Word</a></h3></div>
packageorg.imooc.dto;
importorg.apache.commons.fileupload.FileItem;
importjava.util.HashMap;
importjava.util.Map;
publicclassParamDto {
privateMap<String,String>paramMap;
privateMap<String,FileItem>fileMap;
publicParamDto() {
paramMap=newHashMap<>();
fileMap=newHashMap<>();
    }
    ...
}
packageorg.imooc.dto;
importorg.apache.commons.fileupload.FileItem;
publicclassImportExcelParamDto {
privateStringtitle;
privateFileItemexcel;
    ...
}
packageorg.imooc.dto;
importorg.imooc.entity.Student;
importjava.util.List;
publicclassImportExcelResultDto {
privateStringtitle;
privateList<Student>studentList;
privateStringmsg;
    ...
}
packageorg.imooc.dto;
importorg.apache.commons.fileupload.FileItem;
publicclassImportWordParamDto {
privateStringtitle;
privateFileItemword;
    ...
}
packageorg.imooc.dto;
publicclassImportWordResultDto {
privateStringtitle;
privateStringcontent;
privateStringmsg;
    ...
}
packageorg.imooc.entity;
importjava.util.Date;
publicclassStudent {
privateStringname;
privateIntegerage;
privateDatetime;
    ...
}
packageorg.imooc.util;
importorg.apache.commons.fileupload.FileItem;
importorg.apache.commons.fileupload.FileUploadException;
importorg.apache.commons.fileupload.disk.DiskFileItemFactory;
importorg.apache.commons.fileupload.servlet.ServletFileUpload;
importorg.imooc.dto.ParamDto;
importjavax.servlet.http.HttpServletRequest;
importjava.util.List;
publicclassRequestUtil {
/*** 从request流中解析参数与上传的文件* @param request*/publicstaticParamDtoparseParam(HttpServletRequestrequest) {
ParamDtoresult=newParamDto();
ServletFileUploadupload=newServletFileUpload(newDiskFileItemFactory());
upload.setHeaderEncoding("UTF-8");
try {
List<FileItem>fileItemList=upload.parseRequest(request);
for(FileItemfileItem : fileItemList) {
if(fileItem.isFormField()) { // 普通字段result.getParamMap().put(fileItem.getFieldName(),fileItem.getString("UTF-8"));
                }
else { // 文件字段result.getFileMap().put(fileItem.getFieldName(),fileItem);
                }
            }
        } catch (FileUploadExceptione) {
e.printStackTrace();
        } catch (Exceptione) {
e.printStackTrace();
        }
returnresult;
    }
}
packageorg.imooc.service;
importorg.apache.poi.hssf.usermodel.HSSFWorkbook;
importorg.apache.poi.ss.usermodel.Row;
importorg.apache.poi.ss.usermodel.Sheet;
importorg.apache.poi.ss.usermodel.Workbook;
importorg.apache.poi.ss.usermodel.WorkbookFactory;
importorg.apache.poi.xssf.usermodel.XSSFWorkbook;
importorg.imooc.dto.ImportExcelParamDto;
importorg.imooc.dto.ImportExcelResultDto;
importorg.imooc.entity.Student;
importjava.io.IOException;
importjava.util.ArrayList;
importjava.util.List;
publicclassExcelService {
publicImportExcelResultDtoimp(ImportExcelParamDtodto) {
ImportExcelResultDtoresult=newImportExcelResultDto();
result.setTitle(dto.getTitle());
List<Student>studentList=newArrayList<>();
result.setStudentList(studentList);
Workbookworkbook=null;
try {
// 整个excel(包含里面很多的sheet)workbook=WorkbookFactory.create(dto.getExcel().getInputStream());
// 第0个sheetSheetsheet=workbook.getSheetAt(0);
// 从0开始数,但是这里的 rowNum == len-1introwNum=sheet.getLastRowNum();
for(inti=1; i<=rowNum; i++) {
// 第1行,因为第0行是字段名Rowrow=sheet.getRow(i);
Studentstudent=newStudent();
studentList.add(student);
// 获取单元格cell的内容// 注意:这里的数据类型要与excel的单元格的数据类型对齐,右键【设置单元格格式(F)…】查看student.setName(row.getCell(0).getStringCellValue());
student.setAge((int) row.getCell(1).getNumericCellValue());
student.setTime(row.getCell(2).getDateCellValue());
            }
        } catch (Exceptione) {
e.printStackTrace();
result.setMsg("解析Excel失败!");
        } finally {
if(workbook!=null) {
try {
workbook.close();
                } catch (IOExceptione) {
e.printStackTrace();
                }
            }
        }
returnresult;
    }
publicWorkbookexport(booleanisXlsx) {
Workbookworkbook;
if(isXlsx) { // 07workbook=newXSSFWorkbook();
        } 
else { // 03workbook=newHSSFWorkbook(); 
        }
Sheetsheet=workbook.createSheet("My Sheet");
List<List<String>>content=this.getContent();
for(inti=0; i<content.size(); i++) {
Rowrow=sheet.createRow(i);
List<String>rowData=content.get(i);
for(intj=0; j<rowData.size(); j++) {
row.createCell(j).setCellValue(rowData.get(j));
            }
        }
returnworkbook;
    }
privateList<List<String>>getContent() {
List<List<String>>result=newArrayList<>();
List<String>row=newArrayList<>();
result.add(row);
row.add("序号");
row.add("姓名");
row.add("年龄");
row.add("时间");
row=newArrayList<>();
result.add(row);
row.add("1");
row.add("路人甲");
row.add("18");
row.add("2010-01-01");
row=newArrayList<>();
result.add(row);
row.add("2");
row.add("路人乙");
row.add("19");
row.add("2010-01-02");
row=newArrayList<>();
result.add(row);
row.add("3");
row.add("路人丙");
row.add("20");
row.add("2010-01-03");
returnresult;
    }
}
packageorg.imooc.service;
importorg.apache.poi.hwpf.HWPFDocument;
importorg.apache.poi.hwpf.usermodel.Range;
importorg.apache.poi.poifs.filesystem.OfficeXmlFileException;
importorg.apache.poi.xwpf.usermodel.XWPFDocument;
importorg.apache.poi.xwpf.usermodel.XWPFParagraph;
importorg.apache.poi.xwpf.usermodel.XWPFRun;
importorg.imooc.dto.ImportWordParamDto;
importorg.imooc.dto.ImportWordResultDto;
importjava.io.FileInputStream;
importjava.io.IOException;
importjava.util.List;
importjava.util.Map;
publicclassWordService {
/*** 导入*/publicImportWordResultDtoimp(ImportWordParamDtodto) {
ImportWordResultDtoresult=newImportWordResultDto();
result.setTitle(dto.getTitle());
HWPFDocumentdoc=null; // 03try {
doc=newHWPFDocument(dto.getWord().getInputStream());
// word 中的换行标识符是 \rresult.setContent(doc.getDocumentText().replace("\r","<br/>"));
        } catch (OfficeXmlFileExceptionoe) {
System.out.println("这可能是一个07版的Word");
        } catch (Exceptione) {
result.setMsg("这可能不是一个Word");
returnresult;
        } finally {
if(doc!=null) {
try {
doc.close();
returnresult;
                } catch (IOExceptione) {
e.printStackTrace();
                }
            }
        }
// 07XWPFDocumentdocx=null;
try {
docx=newXWPFDocument(dto.getWord().getInputStream());
List<XWPFParagraph>paragraphList=docx.getParagraphs();
StringBuildercontent=newStringBuilder();
// 07Word 以段落的方式分割,是手动换行才算;而不是空间不够挤到下一行,这不算换行,会当成同一个段落里for (inti=0; i<paragraphList.size(); i++) {
if(i!=0) {
content.append("<br/>");
                }
content.append(paragraphList.get(i).getText());
            }
result.setContent(content.toString());
        } catch (IOExceptione) {
e.printStackTrace();
        } finally {
if(docx!=null) {
try {
docx.close();
                } catch (IOExceptione) {
e.printStackTrace();
                }
            }
        }
returnresult;
    }
/*** 导出03版Word*/publicHWPFDocumentexport03(Map<String,String>replaceContent) {
HWPFDocumentdoc=null;
try {
// 模板文件地址载入doc=newHWPFDocument(newFileInputStream("D:\\template\\template_03.doc"));
Rangerange=doc.getRange();
for(Map.Entry<String,String>entry : replaceContent.entrySet()) {
range.replaceText(entry.getKey(),entry.getValue());
            }
        } catch (Exceptione) {
returnnull;
        }
returndoc;
    }
/*** 导出07版Word*/publicXWPFDocumentexport07(Map<String,String>replaceContent) {
XWPFDocumentdocx=null;
try {
// 模板文件地址载入,导出一定要有模板文件,否则是不行的。docx=newXWPFDocument(newFileInputStream("D:\\template\\template_07.docx"));
List<XWPFParagraph>paragraphList=docx.getParagraphs();
for(XWPFParagraphparagraph : paragraphList) {
List<XWPFRun>runs=paragraph.getRuns();
// run 是根据格式不一样来分割for(XWPFRunrun : runs) {
Stringstr=run.getText(run.getTextPosition());
for(Map.Entry<String,String>entry : replaceContent.entrySet()) {
str=str.replace(entry.getKey(),entry.getValue());
                    }
run.setText(str,0);
                }
            }
        } catch (IOExceptione) {
returnnull;
        }
returndocx;
    }
}

7.导入Excel(核心代码)

packageorg.imooc.servlet;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjava.io.IOException;
publicclassImportExcelInitServletextendsHttpServlet {
@OverrideprotectedvoiddoGet(HttpServletRequestreq, HttpServletResponseresp) throwsServletException, IOException {
this.doPost(req, resp);
    }
@OverrideprotectedvoiddoPost(HttpServletRequestreq, HttpServletResponseresp) throwsServletException, IOException {
req.getRequestDispatcher("/WEB-INF/jsp/importExcel.jsp").forward(req,resp);
    }
}
// importExcel.jsp<formid="mainForm"method="post"enctype=""action="${basePath}/importExcel"><inputid="title"name="title"type="text"/><inputtype="file"name="excel"/><inputvalue="导入"onclick="document.getElementById('mainForm').submit();"type="button"/></form>
packageorg.imooc.servlet;
importorg.apache.commons.fileupload.servlet.ServletFileUpload;
importorg.imooc.dto.ImportExcelParamDto;
importorg.imooc.dto.ImportExcelResultDto;
importorg.imooc.dto.ParamDto;
importorg.imooc.service.ExcelService;
importorg.imooc.util.RequestUtil;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjava.io.IOException;
publicclassImportExcelServletextendsHttpServlet {
@OverrideprotectedvoiddoGet(HttpServletRequestreq, HttpServletResponseresp) throwsServletException, IOException {
this.doPost(req, resp);
    }
@OverrideprotectedvoiddoPost(HttpServletRequestreq, HttpServletResponseresp) throwsServletException, IOException {
if(ServletFileUpload.isMultipartContent(req)) { // enctype="multipart/form-data" 带文件上传的表单ParamDtodto=RequestUtil.parseParam(req);
ImportExcelParamDtoparamDto=newImportExcelParamDto();
paramDto.setTitle(dto.getParamMap().get("title"));
paramDto.setExcel(dto.getFileMap().get("excel"));
ExcelServiceservice=newExcelService();
ImportExcelResultDtoresultDto=service.imp(paramDto);
req.setAttribute("result",resultDto);
        }
else { // 普通表单// req.getParameter("");        }
req.getRequestDispatcher("/WEB-INF/jsp/importExcelResult.jsp").forward(req,resp);
    }
}
// importExcelResult.jsp<scripttype="text/javascript">functionbodyInit() {
// 与EL搭配使用时,必须要加引号,因为读取出来不是字符串,比如:张三,而不是"张三"// if('') --> false; if('有内容') --> trueif('${result.msg}') {
alert('${result.msg}');
        }
    }
</script><bodyonload="bodyInit();"><tr><td>标题:</td><td>${result.title}</td></tr><c:forEachitems="${result.studentList}"var="item"varStatus="s"><tr><td>${s.count}</td><td>${item.name}</td><td>${item.age}</td><td><fmt:formatDatevalue="${item.time}"pattern="yyyy-MM-dd"/></td></tr></c:forEach></body>

8.导出Excel(核心代码)

packageorg.imooc.servlet;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjava.io.IOException;
publicclassExportExcelInitServletextendsHttpServlet {
@OverrideprotectedvoiddoGet(HttpServletRequestreq, HttpServletResponseresp) throwsServletException, IOException {
this.doPost(req, resp);
    }
@OverrideprotectedvoiddoPost(HttpServletRequestreq, HttpServletResponseresp) throwsServletException, IOException {
req.getRequestDispatcher("/WEB-INF/jsp/exportExcel.jsp").forward(req,resp);
    }
}
// exportExcel.jsp<formaction="${basePath}/exportExcel"id="mainForm"method="post"><td>标题:</td><td><inputid="title"value=""type="text"/></td><td><inputvalue="查询"onclick=""type="button"/><inputvalue="导出"onclick="document.getElementById('mainForm').submit();"type="button"/></td></form>
packageorg.imooc.servlet;
importorg.apache.poi.ss.usermodel.Workbook;
importorg.imooc.service.ExcelService;
importjavax.servlet.ServletException;
importjavax.servlet.ServletOutputStream;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.IOException;
publicclassExportExcelServletextendsHttpServlet {
@OverrideprotectedvoiddoGet(HttpServletRequestreq, HttpServletResponseresp) throwsServletException, IOException {
this.doPost(req, resp);
    }
@OverrideprotectedvoiddoPost(HttpServletRequestreq, HttpServletResponseresp) throwsServletException, IOException {
ExcelServiceservice=newExcelService();
Workbookworkbook=service.export(true);
resp.setHeader("Content-Disposition","attachment;filename=export.xlsx");
ServletOutputStreamoutputStream=resp.getOutputStream();
// 直接将文件输出提供下载导出workbook.write(outputStream);
outputStream.flush();
outputStream.close();
workbook.close();
// 把文件先存下来再提供下载导出// 想用这种方法把上边【直接将文件输出提供下载导出】部分注释掉,把下边这部分代码放开运行//        FileOutputStream fileOutputStream = new FileOutputStream("d:/upload/export.xlsx");//        workbook.write(fileOutputStream);//        FileInputStream fileInputStream = new FileInputStream("d:/upload/export.xlsx");//        byte[] bytes = new byte[fileInputStream.available()];//        fileInputStream.read(bytes);//        outputStream.write(bytes);//        outputStream.flush();//        outputStream.close();//        workbook.close();    }
}
/*第一种:直接将文件输出提供下载导出客户端:我要一个表格服务器:好,我在处理服务器(处理好了)服务器:接着!(直接把处理好的丢给客户端,所以服务端丢完就没了)客户端:拿到了!第二种:把文件先存下来再提供下载导出客户端:我要一个表格服务器:好,我在处理服务器(处理好了)服务器:路径给你,自己下载一份!(把处理好的保存在自己的磁盘,所以服务端还存在)客户端:我下载好了!(是根据服务器提供的下载路径下载下来,相当于服务器是原本,客户端是拷贝本)*/

9.导入Word(核心代码)

packageorg.imooc.servlet;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjava.io.IOException;
publicclassImportWordInitServletextendsHttpServlet {
@OverrideprotectedvoiddoGet(HttpServletRequestreq, HttpServletResponseresp) throwsServletException, IOException {
this.doPost(req, resp);
    }
@OverrideprotectedvoiddoPost(HttpServletRequestreq, HttpServletResponseresp) throwsServletException, IOException {
req.getRequestDispatcher("/WEB-INF/jsp/importWord.jsp").forward(req,resp);
    }
}
// importWord.jsp<formid="mainForm"method="post"action="${basePath}/importWord"enctype="multipart/form-data"><inputid="title"name="title"type="text"/><inputtype="file"name="word"/><inputvalue="导入"onclick="document.getElementById('mainForm').submit();"type="button"/></form>
packageorg.imooc.servlet;
importorg.apache.commons.fileupload.servlet.ServletFileUpload;
importorg.imooc.dto.*;
importorg.imooc.service.WordService;
importorg.imooc.util.RequestUtil;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjava.io.IOException;
publicclassImportWordServletextendsHttpServlet {
@OverrideprotectedvoiddoGet(HttpServletRequestreq, HttpServletResponseresp) throwsServletException, IOException {
this.doPost(req, resp);
    }
@OverrideprotectedvoiddoPost(HttpServletRequestreq, HttpServletResponseresp) throwsServletException, IOException {
if(ServletFileUpload.isMultipartContent(req)) { // 带有文件表单ParamDtodto=RequestUtil.parseParam(req);
ImportWordParamDtoparamDto=newImportWordParamDto();
paramDto.setTitle(dto.getParamMap().get("title"));
paramDto.setWord(dto.getFileMap().get("word"));
WordServiceservice=newWordService();
ImportWordResultDtoresultDto=service.imp(paramDto);
req.setAttribute("result",resultDto);
        }
else { // 普通表单// req.getParameter("");        }
req.getRequestDispatcher("/WEB-INF/jsp/importWordResult.jsp").forward(req,resp);
    }
}
// importWordResult.jsp<scripttype="text/javascript">functionbodyInit() {
if('${result.msg}') {
alert('${result.msg}');
        }
    }
</script><bodyonload="bodyInit();"><formaction=""id="mainForm"method="post"><tr><td>标题:</td><td>${result.title}</td></tr><tr><td>内容:</td><td>${result.content}</td></tr></form></body>

10.导出Word(核心代码)

packageorg.imooc.servlet;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjava.io.IOException;
publicclassExportWordInitServletextendsHttpServlet {
@OverrideprotectedvoiddoGet(HttpServletRequestreq, HttpServletResponseresp) throwsServletException, IOException {
this.doPost(req, resp);
    }
@OverrideprotectedvoiddoPost(HttpServletRequestreq, HttpServletResponseresp) throwsServletException, IOException {
req.getRequestDispatcher("/WEB-INF/jsp/exportWord.jsp").forward(req,resp);
    }
}
// exportWord.jsp<formid="mainForm"method="post"action="${basePath}/exportWord"><inputtype="hidden"name="isDocx"id="isDocx"/><inputname="name"value="张三"type="text"/><inputname="age"value="40"type="text"/><inputname="time"value="2016-01-01"type="text"/><inputvalue="导出03"type="button"onclick="document.getElementById('isDocx').value = '';document.getElementById('mainForm').submit();"/><inputvalue="导出07"type="button"onclick="document.getElementById('isDocx').value = '1';document.getElementById('mainForm').submit();"/></form>
packageorg.imooc.servlet;
importorg.apache.poi.hwpf.HWPFDocument;
importorg.apache.poi.xwpf.usermodel.XWPFDocument;
importorg.imooc.service.WordService;
importjavax.servlet.ServletException;
importjavax.servlet.ServletOutputStream;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjava.io.IOException;
importjava.util.HashMap;
importjava.util.Map;
publicclassExportWordServletextendsHttpServlet {
@OverrideprotectedvoiddoGet(HttpServletRequestreq, HttpServletResponseresp) throwsServletException, IOException {
this.doPost(req, resp);
    }
@OverrideprotectedvoiddoPost(HttpServletRequestreq, HttpServletResponseresp) throwsServletException, IOException {
// 用流直接输出,服务器没有保存req.setCharacterEncoding("UTF-8");
WordServiceservice=newWordService();
Map<String,String>param=newHashMap<>();
param.put("${name}",req.getParameter("name"));
param.put("${age}",req.getParameter("age"));
param.put("${time}",req.getParameter("time"));
ServletOutputStreamoutputStream=resp.getOutputStream();
if(req.getParameter("isDocx") !=null&&!"".equals(req.getParameter("isDocx"))) {
XWPFDocumentdocx=service.export07(param);
resp.setHeader("Content-Disposition","attachment;filename=export.docx");
docx.write(outputStream);
docx.close();
        } else {
HWPFDocumentdoc=service.export03(param);
resp.setHeader("Content-Disposition","attachment;filename=export.doc");
doc.write(outputStream);
doc.close();
        }
outputStream.flush();
outputStream.close();
    }
}

11.下载地址:点击进入下载页面

12.待更新...

目录
相关文章
Excel中如何批量重命名工作表与将每个工作表导出到单独Excel文件
本文介绍了如何在Excel中使用VBA批量重命名工作表、根据单元格内容修改颜色,以及将工作表导出为独立文件的方法。同时提供了Python实现导出工作表的代码示例,适用于自动化处理Excel文档。
|
人工智能 搜索推荐 API
Cobalt:开源的流媒体下载工具,支持解析和下载全平台的视频、音频和图片,支持多种视频质量和格式,自动提取视频字幕
cobalt 是一款开源的流媒体下载工具,支持全平台视频、音频和图片下载,提供纯净、简洁无广告的体验
3363 9
Cobalt:开源的流媒体下载工具,支持解析和下载全平台的视频、音频和图片,支持多种视频质量和格式,自动提取视频字幕
|
数据采集 存储 数据库连接
Requests与BeautifulSoup:高效解析网页并下载资源
Requests与BeautifulSoup:高效解析网页并下载资源
|
存储 Java easyexcel
招行面试:100万级别数据的Excel,如何秒级导入到数据库?
本文由40岁老架构师尼恩撰写,分享了应对招商银行Java后端面试绝命12题的经验。文章详细介绍了如何通过系统化准备,在面试中展示强大的技术实力。针对百万级数据的Excel导入难题,尼恩推荐使用阿里巴巴开源的EasyExcel框架,并结合高性能分片读取、Disruptor队列缓冲和高并发批量写入的架构方案,实现高效的数据处理。此外,文章还提供了完整的代码示例和配置说明,帮助读者快速掌握相关技能。建议读者参考《尼恩Java面试宝典PDF》进行系统化刷题,提升面试竞争力。关注公众号【技术自由圈】可获取更多技术资源和指导。
|
前端开发 Java easyexcel
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
1232 8
|
数据格式 UED
记录一次NPOI库导出Excel遇到的小问题解决方案
【11月更文挑战第16天】本文记录了使用 NPOI 库导出 Excel 过程中遇到的三个主要问题及其解决方案:单元格数据格式错误、日期格式不正确以及合并单元格边框缺失。通过自定义单元格样式、设置数据格式和手动添加边框,有效解决了这些问题,提升了导出文件的质量和用户体验。
1275 3
|
前端开发
实现Excel文件和其他文件导出为压缩包,并导入
实现Excel文件和其他文件导出为压缩包,并导入
508 1
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
1270 4
|
Java API Apache

热门文章

最新文章

推荐镜像

更多
  • DNS