我要做的事,不过是伸手去收割旁人替我播种的庄稼而已。——歌德
需求需要做一个首页统计导出word的功能,但是不仅是word文档,而是对应word模板,替换word内容以及导出饼图,话不多说上代码
1:开始编写代码之前需要弄一下准备工作
设置咱们的word模板内容 注意后缀需要docx
这个模板的文字都不重要因为后面会把这些文字都替换掉,输入文字之后按住Ctrl+F9变成编辑域,然后右键编辑域我这里用的WPS编辑模板
文字和列表都是如此设置好变量,如果是列表传个数组就会一一对应。
到了咱们的重头戏饼图了
导出饼图需要一张图片随便一张图片就可以导出的饼图会按照图片的大小来生成
如图1:桃子的图片 这就是我女朋友抱着桃子嘿嘿嘿 然后选中图片点击wps的插入找到右上角的书签
这里chart代表的也是个变量后边会变成咱们想要的数据
2:导入需要的依赖
<dependency>
<groupId>org.jxls</groupId>
<artifactId>jxls-poi</artifactId>
<version>1.2.0</version> </dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.xdocreport.core</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.xdocreport.document</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.xdocreport.template</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.xdocreport.document.docx</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.xdocreport.template.freemarker</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
3:代码分为两部分第一部分为饼图数据 第二部分为表格数据 根据自己的需求编写
这里我写了个demo根据自己需求变成动态数据就好了
XDocReportRegistry:引入当前模板
fieldsMetadata:对应的key 和 value 咱们可以点进去看一下他的源码 写的还是很容易理解的
chart:就是饼图的key
info:对应的表格key 我这里用的实体类接收的 所以模板是info.key
EasyWordUtil:是我封装用于生生饼图的

4:这里记录一下我踩得坑
首先我上来就遇到一个深坑 xdocreport这个是对模板类型有要求 虽然要求后缀为.docx但是我自己
创建的docx会报:java.io.IOException: InputStream is not a zip.
说文件不是zip文件但是文档要求docx就是没有问题,解决方法就是去找源码并下载他提供的模板
源码:https://github.com/opensagres/xdocreport
XDocReport常见问题以及介绍:https://github.com/opensagres/xdocreport/wiki/FAQ
上面介绍还是很详细的
还有就是一定要对比好模板的变量要一一对应,就不会有问题
5:效果展示
咱们单元测试通过并没有问题
咱们刚才的模板对比生成的word 当然这只是单元测试牛刀小试 功能很强大 还需要大家多多的摸索
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。