一天实现用poi-tl导出word(饼图/柱状图、文字、表格、循环word),男朋友看完直呼好家伙
用一天的时间实现了要求的word的导出,包含表格、饼图、文字、柱状图,男朋友直竖大拇指,非让我给他讲,学会以后直呼抱大腿,害,这无处安放的优秀。
想研究的可以自己看一下接口文档 Poi-tl Documentation
咳咳,装杯开始
首先,看一下我们想要导出的文件格式
可以看到商品详情中存在模板循环的格式,所以可以分析得到需要表格、文字、饼图、柱状图以及循环模板的要求。
那么,就可以制定文件需要的模板了,如下
{{?section}}{{/section}}是区块对,区块对中的模板为被循环模板。
文字部分可直接替换,表格使用对象集合即可,图表只要符合数据并写入,即可自动生成。
注意!饼图和柱状图直接在word中选择插入图表即可,然后选择编辑图表格式,给定标题就好了,wps操作如图左,word操作如图右。
好了,上代码!
这里我用的都是假数据,实际开发替换数据即可。
public void reportTwo(Integer evalBatchId, String startTime, String endTime, HttpServletResponse response) {final String fileName = "report.docx"; // 结果文件名final String resource = "这里是文件地址/word/test01.docx"; // 模板文件List<Report> reportList = new ArrayList<>();Report report1 = new Report();report1.setCount(1);report1.setName("家居");report1.setNum(6724);report1.setScore(62.86);Report report2 = new Report();report2.setCount(2);report2.setName("文具");report2.setNum(1024);report2.setScore(31.89);reportList.add(report1);reportList.add(report2);List<PointMessage> list = new ArrayList<>();PointMessage p = new PointMessage();p.setRank(1);p.setName("测试");p.setNum(66);p.setScore(99.99);list.add(p);list.add(p);ChartSingleSeriesRenderData pie = Charts.ofSingleSeries("商品类型", new String[]{"家居","厨房用品","文具"}).series("商品数量",new Integer[]{66,13,21}).create();ChartMultiSeriesRenderData chart = Charts.ofMultiSeries(null, new String[]{"家居","厨房用品","文具"}).addSeries("商品数量", new Integer[]{66,13,21}).create();List<Map<String,Object>> sectionsList=new ArrayList<Map<String,Object>>();for (Report one:reportList) {Map<String,Object> tMap = new HashMap<String, Object>();tMap.put("counts", NumberUtil.int2chineseNum(one.getCount()));tMap.put("name",one.getName());tMap.put("num",one.getNum());tMap.put("score",one.getScore());tMap.put("pointMessage", list);tMap.put("combChart", chart);sectionsList.add(tMap);}Map<String, Object> datas = new HashMap<String, Object>() {{put("reports", reportList);put("pieChart", pie);put("sections", sectionsList);}};try {LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();Configure config = Configure.builder().bind("reports", policy).bind("pointMessage", policy).build(); InputStream in = new FileInputStream(new File(resource));XWPFTemplate template = XWPFTemplate.compile(in,config).render(datas);OutputStream fos = response.getOutputStream();response.addHeader("Content-Disposition", "attachment;filename=\"" + new String(fileName.getBytes("UTF-8"), "iso-8859-1") + "\"");response.setCharacterEncoding("utf-8");response.setContentType("application/octet-stream");response.addHeader("Content-Type", "application/vnd.ms-word");response.addHeader("Content-Type", "application/x-msword");template.write(fos);fos.flush();fos.close();} catch (Exception e) {e.printStackTrace();}}
至此就OK啦!
告辞!
一天实现用poi-tl导出word(饼图/柱状图、文字、表格、循环word),男朋友看完直呼好家伙相关推荐
- 如何用word写书_如何将100页PPT转换成Word?1键轻松搞定,看完你还用复制黏贴吗...
我们平常使用的office软件,就是一个强大的格式转换器!今天就和大家分享一下PPT中的多种格式转换方法,一起学习学习~ 一.PPT常用转换格式 1.PPT转Word 我们经常使用的PPT就自带转Wo ...
- java提取word中的文字,java获取word里面的文本
需求场景 开发的web办公系统如果需要处理大量的Word文档(比如有成千上万个文档),用户一定提出查找包含某些关键字的文档的需求,这就要求能够读取 word 中的文字内容,而忽略其中的文字样式.表格. ...
- java提取word中的文字_Java 提取Word中的文本和图片
本文将介绍通过Java来提取或读取Word文档中文本和图片的方法.这里提取文本和图片包括同时提取文档正文当中以及页眉.页脚中的的文本和图片. 使用工具:Free Spire.Doc for Java ...
- 在Word中隐藏文字
在Word中隐藏文字 在用Word中编辑文档时,有时需要对文档中的部分文字进行隐藏,例如在制作试卷时,可以先将答案连同试题一起制作出来,在打印前将答案隐藏,然后在阅卷或讲解试题时再将隐藏的文字显示出来 ...
- Java POI导出word文件及生成表格
HWPF是处理 Microsoft Word 97(-2007) .doc文件格式,它还为较旧的Word 6和Word 95文件格式提供了有限的只读支持.包含在poi-scratchpad-XXX.j ...
- poi导出word时内嵌表格场景,即开即用
poi导出word内嵌表格 设计分析部分 后端代码部分 xml文件配置 实体类 controller层 使用到的工具类 service层 前端代码部分 测试页面 设计分析部分 首先要对导出word的需 ...
- Word文档生成神器:开源项目poi.tl使用介绍
导航: Word文档生成神器:开源项目poi-tl使用介绍 一. 概述 1.1 适合的场景 1.2 poi-tl的优势 二. poi-tl实例演示: 2.1 使用poi-tl生成word文档 三. 更 ...
- 利用poi读取word模板文件生成新的word文档
利用poi读取word模板文件生成新的word文档 利用poi读取word模板文件,并回填逻辑数据,生成并导出需要的word文档源码.解决模板读取异常问题,提供wordUtils工具类(各种功能实现) ...
- java word模板poi生成文件_利用poi读取word模板文件生成新的word文档
利用poi读取word模板文件生成新的word文档 利用poi读取word模板文件,并回填逻辑数据,生成并导出需要的word文档源码.解决模板读取异常问题,提供wordUtils工具类(各种功能实现) ...
最新文章
- Load Runner测试脚本(tuxedo服务)的编写指南
- Android多媒体开发
- Android 优化电池使用时间 ——监控电池电量和充电状态
- Codeforces 437C The Child and Toy(贪心)
- Docker 入门尝鲜
- [转载] 蓝胡子国王的金钥匙
- ecshop源码分析:会话类cls_session
- CAD的菜单栏消失,如何再次调出来
- 2019最新Python学习路线(Python学习教程_Python学习视频):Python2和Python3你们都是怎么选的?
- xyz坐标转换ybc_GNSS仰角和方位角的计算及代码,XYZ转BLH坐标的代码及原理
- 哎 !互联网又偷偷进行了裁员
- response.sendRedirect 加域名或者不加域名的重定向加locahost或者不加localhost
- iOS、mac开源项目及库汇总
- python 从键盘输入若干个整数,当输入“-1““时输入结束,请统计最大值、最小值和平均数
- CSDN什么时候倒闭啊
- SQL server和postgresql差异
- 衣服上的RFID标签对身体有什么影响
- windows下好的flickr客户端
- 计算机平面设计会学cad吗,请问学建筑与室内设计哪样好是不是都要学CAD
- 【技术美术图形部分】AO理论及优化 AO贴图如何参与渲染