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.待更新...

目录
相关文章
|
7月前
|
小程序
公众号如何添加附传Word、Excel、Pdf、PPT文档
公众号里添加一些文档给公众号粉丝下载,比如课件PPT、申请表Word文档、岗位需求Excel表、大赛入围/获奖名单等。公众号本身是不支持直接上传文件的,但我们可以通过附件小程序“间接”上传文件。
1034 0
|
Java API Apache
Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
【10月更文挑战第29天】Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
1113 5
|
11月前
|
人工智能 算法 安全
使用CodeBuddy实现批量转换PPT、Excel、Word为PDF文件工具
通过 CodeBuddy 实现本地批量转换工具,让复杂的文档处理需求转化为 “需求描述→代码生成→一键运行” 的极简流程,真正实现 “技术为效率服务” 的目标。感兴趣的快来体验下把
634 10
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
3550 65
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
数据采集 存储 数据库连接
Requests与BeautifulSoup:高效解析网页并下载资源
Requests与BeautifulSoup:高效解析网页并下载资源
|
人工智能 搜索推荐 API
Cobalt:开源的流媒体下载工具,支持解析和下载全平台的视频、音频和图片,支持多种视频质量和格式,自动提取视频字幕
cobalt 是一款开源的流媒体下载工具,支持全平台视频、音频和图片下载,提供纯净、简洁无广告的体验
2368 9
Cobalt:开源的流媒体下载工具,支持解析和下载全平台的视频、音频和图片,支持多种视频质量和格式,自动提取视频字幕
|
人工智能 自然语言处理 JavaScript
Univer:开源全栈 AI 办公工具,支持 Word、Excel、PPT 等文档处理和多人实时协作
Univer 是一款开源的 AI 办公工具,支持 Word、Excel 等文档处理的全栈解决方案。它具有强大的功能、高度的可扩展性和跨平台兼容性,适用于个人和企业用户,能够显著提高工作效率。
2753 9
Univer:开源全栈 AI 办公工具,支持 Word、Excel、PPT 等文档处理和多人实时协作
|
数据安全/隐私保护 流计算 开发者
python知识点100篇系列(18)-解析m3u8文件的下载视频
【10月更文挑战第6天】m3u8是苹果公司推出的一种视频播放标准,采用UTF-8编码,主要用于记录视频的网络地址。HLS(Http Live Streaming)是苹果公司提出的一种基于HTTP的流媒体传输协议,通过m3u8索引文件按序访问ts文件,实现音视频播放。本文介绍了如何通过浏览器找到m3u8文件,解析m3u8文件获取ts文件地址,下载ts文件并解密(如有必要),最后使用ffmpeg合并ts文件为mp4文件。
1387 1

推荐镜像

更多
  • DNS