数据导出生成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);

 

转载于:https://www.cnblogs.com/wmqiang/p/11602884.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262554.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python小仙女_python——time库整理(基础知识+实例)

先上目录&#xff0c;1.Time库的作用2. Time库的使用3.实例1.Time库的作用time库是Python中处理时间的标准库提供获取系统时间并格式化输出功能提供系统级精确计时功能&#xff0c;用于程序性能分析2. Time库的使用先明确几个概念&#xff1a;时间戳&#xff1a;格林威治时间19…

JavaScript调用Web Services实现无刷新三联动

http://singlepine.cnblogs.com/articles/301009.html 使用微软提供的webservice.htc实现通过JavaScript调用WebService.1.首先从微软网站上下载webservice.htc,我附件源代码也包含&#xff0c;不下载也可以http://msdn.microsoft.com/workshop/author/webservice/webservice.h…

ArcGIS server for java 安装配置一 续

今天又发生件奇怪的事&#xff0c;昨天配置好的server for java环境&#xff0c;开机后rest服务有无法访问了&#xff0c;反复重装了几次&#xff0c;发现安装后 8399端口可以 使用&#xff0c;但修改了server.xml后&#xff0c;重启发现端口有无法使用了&#xff0c;提示端口下…

python爬虫-异常处理

URLerror产生原因&#xff1a; 网络未连接&#xff08;即不能上网&#xff09;服务器不存在1 #-*-coding:utf-8-*- 2 import urllib2 3 requesturllib2.Request(http://www.wujiadong.com)#这是一个不能打开的网址 4 responseurllib2.urlopen(request) 5 htmlresponse.read() 6…

将给定数据源生成静态HTML页面持久化到项目之外的硬盘

一、java代码 设置好数据源map Map<String,String> mapnew HashMap<>();map.put("knowledgeName",tBasKnowledgebase.getKnowledgeName());map.put("htmlContent",tBasKnowledgebase.getHtmlContent());map.put("publishDate",new j…

qt qthead里如何响应信号_Qt 中的多线程技术(翻译)

原文链接Multithreading Technologies in Qt​doc.qt.io正文Qt 提供一系列的类与函数来处理多线程。Qt 开发者们可以使用下面四种方法来实现多线程应用。QThread: 底层 API 与可选的事件循环作为 Qt 进行线程控制的基石&#xff0c;每一个 QThread 实例都代表并控制着一个线程。…

SATA盘与SAS盘的区别

在过去的20年中&#xff0c;并行&#xff08;Paralle&#xff09;总线接口在存储市场上占据了主导的地位。但随着CPU时钟频率和内存带宽的不断提升&#xff0c;两种主要的并行总线接口技术ATA和SCSI逐渐显现出不足来。尽管ATA和SCSI均是并行总线接口&#xff0c;但是它们之间却…

如何彻底删除SVN中的文件和文件夹(附恢复方法)

在SVN中如果删除某个文件或文件夹也可以在历史记录中进行找回&#xff0c;有的时候需要彻底删除某些文件&#xff0c;即不希望通过历史记录进行恢复&#xff0c;需要在服务器上对SVN的数据进行重新整理这里假设SVN项目的目录为 /data/svn/project&#xff0c;我们想排除trunk/t…

Linux 技巧: Bash 测试和比较函数

http://www.ibm.com/developerworks/cn/linux/l-bash-test.html 转载于:https://www.cnblogs.com/daojian/archive/2012/07/16/2593960.html

页面调用系统window打印

一、 打印&#xff1a;直接页面调用window.print()&#xff0c;当前页面就会转换成打印页面 当前页面是使用HTML拼接成A4纸表格样式的展示&#xff1b; doPrint:function(type) {// this.centerDialogVisiblefalse;$(#button).hide();window.print();$(#button).show(); } 二、…

为什么只看重结果_猫很现实?猫只是看重结果

猫的智谋是许多家养宠物难以比拟的&#xff0c;这和猫的思维模式有关。和一些看重过程的动物不同&#xff0c;猫非常重视结果。这意味着&#xff0c;猫会通过自己的观察&#xff0c;通过结果来倒推过程&#xff0c;从而记住最佳的行动方案。铲屎官教给猫的一些方法&#xff0c;…

SQL Server 语句查询手册

建表&#xff1a; CREATE TABLE [DB.dbo].tableName (Stud_id int CONSTRAINT constraintName1 not null primary key, Name nvarchar(5) not null, Birthday datetime, Gender nchar(1), Telcode char(12), Zipcode char(6) CONSTRAINT constraintName2 CHECK(zipcode like…

Spring 3整合Quartz 2实现定时任务(转)

http://www.meiriyouke.net/?p82 最近工作中需要用到定时任务的功能&#xff0c;虽然Spring3也自带了一个轻量级的定时任务实现&#xff0c;但感觉不够灵活&#xff0c;功能也不够强大。在考虑之后&#xff0c;决定整合更为专业的Quartz来实现定时任务功能。 首先&#xff0c;…

OpenGL Shader基本概念

转载自&#xff1a;http://blog.csdn.net/lcphoenix/article/details/6574417 使用OpenGL创造的物体&#xff0c;在最终被绘制出来之前&#xff0c;有一个流水线处理过程&#xff0c;该过程被称为graphics pipeline,或者rendering pipeline&#xff0c;期间大部分工作由GPU执行…

android 编译之后黑屏_抖音BoostMultiDex:Android低版本上首次启动时间减少80%(一)...

我们知道&#xff0c;Android 低版本(4.X 及以下&#xff0c;SDK < 21)的设备&#xff0c;采用的 Java 运行环境是 Dalvik 虚拟机。它相比于高版本&#xff0c;最大的问题就是在安装或者升级更新之后&#xff0c;首次冷启动的耗时漫长。这常常需要花费几十秒甚至几分钟&…

[转]关于多线程并发:每个开发人员都应了解的内容(转自Mainz's)

Concurrency: What Every Dev Must Know About Multithreaded Apps 本文讨论: 多线程和共享内存线程模型争用及并发访问如何能够打破不变量作为争用标准解决方案的锁定何时需要锁定如何使用锁定&#xff1b;理解开销锁定如何能够各行其道十年前&#xff0c;只有核心系统程序员会…

Filter案例之登录验证

一、登录验证&#xff0c;权限控制 1、需求分析 其中&#xff0c;登录有关的资源被访问时要直接放行&#xff0c;不然会死循环&#xff1b; 2、代码实现 转载于:https://www.cnblogs.com/wmqiang/p/11604621.html

未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序。

当用sqlserver 导入excel文件的时候&#xff0c;会出现未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序。 解决办法&#xff1a;去http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c-4e19-b0da-1463960fdcdb/AccessDatabaseEngine.exe下载。然后安装就行…

js导出excel单元格内换行符代码_前端和excel的那些事

前端和 excel 的那点事在开发需求中&#xff0c;经常会遇到需要和excel相关的需求&#xff0c;毕竟不是所有人都是程序员&#xff0c;很多的业务都是通过excel去进行数据的整理归类计算的&#xff0c;excel中提供的一系列快捷功能&#xff0c;统计功能也非常的实用&#xff0c;…

C语言高级技术之--游戏属性修改器(背景故事)

前些天&#xff0c;由于看朋友在玩单机游戏仙剑3&#xff08;这么早的游戏&#xff0c;早不完了&#xff09;&#xff0c;看得我实在太累&#xff0c;问他为什么不找修改器之类的&#xff0c;那样轻松一些&#xff0c;他的回答让我很无语&#xff0c;他说&#xff1a;“老是下到…