用一天的时间实现了要求的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),男朋友看完直呼好家伙相关推荐

  1. 如何用word写书_如何将100页PPT转换成Word?1键轻松搞定,看完你还用复制黏贴吗...

    我们平常使用的office软件,就是一个强大的格式转换器!今天就和大家分享一下PPT中的多种格式转换方法,一起学习学习~ 一.PPT常用转换格式 1.PPT转Word 我们经常使用的PPT就自带转Wo ...

  2. java提取word中的文字,java获取word里面的文本

    需求场景 开发的web办公系统如果需要处理大量的Word文档(比如有成千上万个文档),用户一定提出查找包含某些关键字的文档的需求,这就要求能够读取 word 中的文字内容,而忽略其中的文字样式.表格. ...

  3. java提取word中的文字_Java 提取Word中的文本和图片

    本文将介绍通过Java来提取或读取Word文档中文本和图片的方法.这里提取文本和图片包括同时提取文档正文当中以及页眉.页脚中的的文本和图片. 使用工具:Free Spire.Doc for Java ...

  4. 在Word中隐藏文字

    在Word中隐藏文字 在用Word中编辑文档时,有时需要对文档中的部分文字进行隐藏,例如在制作试卷时,可以先将答案连同试题一起制作出来,在打印前将答案隐藏,然后在阅卷或讲解试题时再将隐藏的文字显示出来 ...

  5. Java POI导出word文件及生成表格

    HWPF是处理 Microsoft Word 97(-2007) .doc文件格式,它还为较旧的Word 6和Word 95文件格式提供了有限的只读支持.包含在poi-scratchpad-XXX.j ...

  6. poi导出word时内嵌表格场景,即开即用

    poi导出word内嵌表格 设计分析部分 后端代码部分 xml文件配置 实体类 controller层 使用到的工具类 service层 前端代码部分 测试页面 设计分析部分 首先要对导出word的需 ...

  7. Word文档生成神器:开源项目poi.tl使用介绍

    导航: Word文档生成神器:开源项目poi-tl使用介绍 一. 概述 1.1 适合的场景 1.2 poi-tl的优势 二. poi-tl实例演示: 2.1 使用poi-tl生成word文档 三. 更 ...

  8. 利用poi读取word模板文件生成新的word文档

    利用poi读取word模板文件生成新的word文档 利用poi读取word模板文件,并回填逻辑数据,生成并导出需要的word文档源码.解决模板读取异常问题,提供wordUtils工具类(各种功能实现) ...

  9. java word模板poi生成文件_利用poi读取word模板文件生成新的word文档

    利用poi读取word模板文件生成新的word文档 利用poi读取word模板文件,并回填逻辑数据,生成并导出需要的word文档源码.解决模板读取异常问题,提供wordUtils工具类(各种功能实现) ...

最新文章

  1. Load Runner测试脚本(tuxedo服务)的编写指南
  2. Android多媒体开发
  3. Android 优化电池使用时间 ——监控电池电量和充电状态
  4. Codeforces 437C The Child and Toy(贪心)
  5. Docker 入门尝鲜
  6. [转载] 蓝胡子国王的金钥匙
  7. ecshop源码分析:会话类cls_session
  8. CAD的菜单栏消失,如何再次调出来
  9. 2019最新Python学习路线(Python学习教程_Python学习视频):Python2和Python3你们都是怎么选的?
  10. xyz坐标转换ybc_GNSS仰角和方位角的计算及代码,XYZ转BLH坐标的代码及原理
  11. 哎 !互联网又偷偷进行了裁员
  12. response.sendRedirect 加域名或者不加域名的重定向加locahost或者不加localhost
  13. iOS、mac开源项目及库汇总
  14. python 从键盘输入若干个整数,当输入“-1““时输入结束,请统计最大值、最小值和平均数
  15. CSDN什么时候倒闭啊
  16. SQL server和postgresql差异
  17. 衣服上的RFID标签对身体有什么影响
  18. windows下好的flickr客户端
  19. 计算机平面设计会学cad吗,请问学建筑与室内设计哪样好是不是都要学CAD
  20. 【技术美术图形部分】AO理论及优化 AO贴图如何参与渲染

热门文章

  1. 【二〇二一·芒种】读书笔记
  2. 基于点云数据的 Mesh重建与处理
  3. win10系统numba.cuda报错
  4. 易语言查找文本数组里相同文本源码
  5. Cadence IUS 之二: 生成波形
  6. 医疗YY0505思维导图总结
  7. 《高效能人士的7个习惯》-统合综效
  8. 企业必须了解的商标注册常见问题及避雷小技巧
  9. 基于ssm企业工资考勤管理系统
  10. HTML、CSS、JavaScript学习笔记 图文并茂 案例详实(再次系统学习-持续更新)