数据导出生成word附件使用POI的XWPFTemplate对象
比较常用的实现Java导入、导出Excel的技术有两种Jakarta POI和Java Excel。
Jakarta POI 是一套用于访问微软格式文档的Java API。Jakarta POI有很多组件组成,其中有用于
操作Excel格式文件的HSSF和
用于操作Word的HWPF;

一、前端使用get请求和post请求都可以
get请求:
window.location.href= appPath+"/export/handoverForm?ticketId="+self.ticketId +
"&complainId="+row.id+"&formCode="+self.exportFormCode.complainDetail;
隐藏form表单改写成post请求,form表单get和post都可以:
<form id="exportForm" action="/service/xfComplain/exportCaseLedger" method="post">
<input type="hidden" name="dataRange" id="dataRange"/>
<input type="hidden" name="processStatus" id="processStatus"/>
<input type="hidden" name="cantonCode" id="cantonCode"/>
<input type="hidden" name="startDate" id="startDate"/>
<input type="hidden" name="endDate" id="endDate"/>
<input type="hidden" name="multiFildMatch" id="multiFildMatch"/>
</form>
$("#dataRange").val(self.table.pageData.dataRange);
$("#processStatus").val(self.table.pageData.processStatus);
$("#startDate").val(self.table.pageData.startDate);
$("#endDate").val(self.table.pageData.endDate);
$("#multiFildMatch").val(self.table.pageData.multiFildMatch);
$('#exportForm').submit();
二、java代码
@ResponseBody
@RequestMapping("/exportWord")
public void exportHandoverForm(HttpServletRequest request,
HttpServletResponse response, ExportParam exportParam) {
String projectPath = getProjectPath(request);
String templateFile = getTemplateFile(exportParam, projectPath, request);
Map<String, Object> data = new HashMap<>();
File file = null;
InputStream in = null;
ServletOutputStream out = null;
try {
// 数据源
HandoverModel handoverModel = getHandoverFormData(exportParam.getComplainId());
// 反射机制,获取所有属性对象,在拿到属性值,设置数据
for (Field field : HandoverModel.class.getDeclaredFields()) {
// 暴力反射,不是public修饰的属性也要获取
field.setAccessible(true);
data.put(field.getName(), field.get(handoverModel));
}
// 数据源组成map键值对形式
data.put("reportorList", handoverModel.getReportorList().getDatas());
String fileName = handoverModel.getCaseCode();
String exportFilePath = projectPath + ExportConstant.DEFAULT_EXPORT_PATH;
logger.info("----------templateFile:" + templateFile);
logger.info("-----------projectPath:" + projectPath);
// Configure对象是处理表格数据,可以自适应生成对应行数数据
Configure config = Configure.newBuilder().customPolicy("reportorList", new FileTablePolicy()).build();
// XWPFTemplate对象是处理word文档对象,根据map数据源的键值对渲染文档数据
XWPFTemplate template = XWPFTemplate.compile(templateFile, config).render(data);
// 文件生成到本地,先生成好文档,再读取到内存中响应给前台
String downloadFileName = fileName + ".docx";
File outPutFile = new File(exportFilePath);
if (!outPutFile.exists()) {
outPutFile.mkdirs();
}
FileOutputStream outFile = new FileOutputStream(exportFilePath + downloadFileName);
template.write(outFile);
outFile.flush();
outFile.close();
template.close();
// 通过文件流读取到文件,再将文件通过response的输出流,返回给页面下载
file = new File(projectPath + ExportConstant.DEFAULT_EXPORT_PATH + downloadFileName);
in = new FileInputStream(file);
response.setCharacterEncoding("utf-8");
response.setContentType("application/msword");
response.setHeader("Content-Disposition", "attachment;filename="
.concat(String.valueOf(URLEncoder.encode(downloadFileName, "UTF-8"))));
out = response.getOutputStream();
byte[] buffer = new byte[512];
int bytesToRead = -1;
// 用响应对象response中的输出流读取生成好的文件
while ((bytesToRead = in.read(buffer)) != -1) {
out.write(buffer, 0, bytesToRead);
}
} catch (Exception e) {
logger.error("导出word出错", e);
} finally {
if (in != null) try {
in.close();
if (out != null) out.close();
if (file != null) file.delete(); // 删除临时文件
} catch (IOException e) {
logger.error("删除删除临时文件出错", e);
}
}
}
使用XWPFTemplate引擎,插件化Configure插入表格;

三、不需要插入表格:

XWPFTemplate template = XWPFTemplate.compile(templateFile).render(data);
数据导出生成word附件使用POI的XWPFTemplate对象的更多相关文章
- 数据导出生成Excel附件使用POI的HSSFWorkbook对象
比较常用的实现Java导入.导出Excel的技术有两种Jakarta POI和Java Excel.Jakarta POI 是一套用于访问微软格式文档的Java API.Jakarta POI有很多组 ...
- PowerDesigner将PDM导出生成WORD文档
PowerDesigner将PDM导出生成WORD文档 环境 PowerDesigner15 1.点击Report Temlates 制作模板 2.如果没有模板,单击New图标创建.有直接双击进入. ...
- 在ASP.NET中将GridView数据导出到Word、Excel
在ASP.NET中将GridView数据导出到Word.Excel asp.net,导出gridview数据到Word,Excel,PDF #region Export to Word, Exce ...
- java导出生成word(类似简历导出)
参考帖子: http://www.cnblogs.com/lcngu/p/5247179.html http://www.cnblogs.com/splvxh/archive/2013/03/15/2 ...
- java导出生成word
最近做的项目,需要将一些信息导出到word中.在网上找了好多解决方案,现在将这几天的总结分享一下. 目前来看,java导出word大致有6种解决方案: 1:Jacob是Java-COM Bridge的 ...
- 实现excel导入导出功能,excel导入数据到页面中,页面数据导出生成excel文件
今天接到项目中的一个功能,要实现excel的导入,导出功能.这个看起来思路比较清楚,但是做起了就遇到了不少问题. 不过核心的问题,大家也不会遇到了.每个项目前台页面,以及数据填充方式都不一样,不过大多 ...
- gridview数据导出到word和excel以及excel的导入
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI ...
- 使用NPOI将数据导出为word格式里的table
开发环境:VS2013+MySQL5.5+EF6+NPOI2.0.6 格式:WinForm+CodeFirst PS:vs2013的CodeFirst很方便了啊 CodeFirst方式就不再赘述了. ...
- 将HTML导出生成word文档
前言: 项目开发中遇到了需要将HTML页面的内容导出为一个word文档,所以有了这边随笔. 当然,项目开发又时间有点紧迫,第一时间想到的是用插件,所以百度了下.下面就介绍两个导出word文档的方法. ...
随机推荐
- Android程序员提加薪被拒,刷2000题跳槽涨薪50%!
为什么想跳槽? 简单说一下当时的状况,我在这家公司做了两年多,这两年多完成了一个大项目,作为开发的核心主力,开发压力很大,特别是项目上线前的几个月是非常辛苦,几乎每晚都要加班到12点以后,周末最多只有 ...
- 一键部署lnmp基本
#!/bin/bash systemctl stop firewalld systemctl disable firewalld setenforce 0 #--------nginx-------- ...
- Python Flask API实现方法-测试开发【提测平台】阶段小结(一)
微信搜索[大奇测试开],关注这个坚持分享测试开发干货的家伙. 本篇主要是对之前几次分享的阶阶段的总结,温故而知新,况且虽然看起来是一个小模块简单的增删改查操作,但其实涉及的内容点是非常的密集的,是非常 ...
- pikachu 目录遍历 敏感信息泄露
目录遍历漏洞概述在web功能设计中,很多时候我们会要将需要访问的文件定义成变量,从而让前端的功能变的更加灵活. 当用户发起一个前端的请求时,便会将请求的这个文件的值(比如文件名称)传递到后台,后台再执 ...
- sqli-labs lesson1-4
写在前面: 前四关基本都是基于GET的SQL注入 在Mysql中有一个系统数据库information_schema,存储着所有数据库的相关信息,一般利用这个数据库进行SQL注入. 因为大部分的注入需 ...
- STM32—位带操作
STM32中的位带操作: 名字为位带操作,实际上是对位的操作,位操作就是可以单独的对一个比特位读和写,这个在 51 单片机中非常常见. 51 单片机中通过关键字 sbit 来实现位定义, STM32 ...
- linux ftp ubuntu18.04 实测有效 完整方法 vsftpd
https://linuxize.com/post/how-to-setup-ftp-server-with-vsftpd-on-ubuntu-18-04/ 除了此链接完整有效,其他网友 大都残缺不全 ...
- Elasticsearch BM25相关度算法超详细解释
Photo by Pixabay from Pexels 前言:日常在使用Elasticsearch的搜索业务中多少会出现几次 "为什么这个Doc分数要比那个要稍微低一点?".&q ...
- Django 反向解析 request CBV
正则路径中的分组 无名分组 分组的概念:就是给某一段正则表达式用小括号括起来 无名分组按位置传参数,一一对应. view中除去request,其他形参数量要与urls中分组数量一致. 无名分组就是将括 ...
- 【网络编程】TCPIP-8-套接字的多种选项
目录 前言 8. 套接字的多种选项 8.1 API getsockopt(); & setsockopt(); 8.2 套接字选项 8.3 缓冲区相关可选项 8.4 端口复用 8.4.1 ti ...