当前位置: 首页 > news >正文

java使用poi-tl模版引擎导出word之饼状图生成及循环批量生成饼状图

文章目录

  • 一、单个饼状图生成
    • 1.word模版制作
    • 2.编写接口完整代码
    • 3.导出结果
  • 二、批量生成饼图
    • 1.word模版制作
    • 2.编写接口完整代码
    • 3.导出结果

一、单个饼状图生成

1.word模版制作

在word中创建一个饼状图,点击图表,点击“文本选项”,在可选文字标题中填入{{pieChart}}
在这里插入图片描述

2.编写接口完整代码

    @GetMapping("/exportWord")public void exportWord(HttpServletResponse response) throws FileNotFoundException {//存放数据,也就是填充在word里面的值Map<String, Object> params = new HashMap<>();params.put("title","测试使用poi-tl模版导出word");ChartSingleSeriesRenderData pie = Charts.ofSingleSeries("测试第一个饼图", new String[] { "男", "女" }).series("countries", new Integer[] { 9826675, 9596961 }).create();params.put("pieChart", pie);// 或模板在静态资源的相对路径File rootFile = new File((ResourceUtils.getURL("classpath:").getPath()));File templateFile = new File(rootFile, "/static/templates/exportWord.docx");//jar包获取不到文件路径`//URLDecoder.decode() 解决获取中文名称文件路径乱码String templatePath = URLDecoder.decode(templateFile.getPath());//生成文件名String fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + "_" + System.currentTimeMillis();// 导出woldtry {// 导出Word文档为文件XWPFTemplate template = XWPFTemplate.compile(templatePath,builder.build()).render(params);// 将导出的Word文件转换为流response.setContentType("application/octet-stream");response.setHeader("Content-disposition","attachment;filename=\""+fileName+".docx"+"\"");// HttpServletResponse responseOutputStream out = response.getOutputStream();BufferedOutputStream bos = new BufferedOutputStream(out);template.write(bos);bos.flush();out.flush();// 最后不要忘记关闭这些流。PoitlIOUtils.closeQuietlyMulti(template, bos, out);} catch (Exception e) {System.out.println("导出Word文档时出现异常:" + e.getMessage());}}

3.导出结果

在这里插入图片描述

二、批量生成饼图

1.word模版制作

在word中创建一个饼状图,点击图表,点击“文本选项”,在可选文字标题中同样填入{{pieChart}}
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d4c372a1df774bad94b3f0662e886959.png

2.编写接口完整代码

    @GetMapping("/exportWord")public void exportWord(HttpServletResponse response) throws FileNotFoundException {//存放数据,也就是填充在word里面的值Map<String, Object> params = new HashMap<>();params.put("title","测试使用poi-tl模版导出word");List<Map<String, Object>> list = new ArrayList<>();Map<String, Object> map = new HashMap<>();map.put("a","测试");map.put("b","米");map.put("c","201312");ChartSingleSeriesRenderData pie = Charts.ofSingleSeries("测试第一个饼图", new String[] { "男", "女" }).series("countries", new Integer[] { 9826675, 9596961 }).create();map.put("pieChart", pie);list.add(map);Map<String, Object> map1 = new HashMap<>();map1.put("a","测试2");map1.put("b","千米");map1.put("c","2012312");ChartSingleSeriesRenderData pie1 = Charts.ofSingleSeries("测试第二个饼图", new String[] { "上海", "广州" }).series("countries", new Integer[] { 253, 985 }).create();map1.put("pieChart", pie1);list.add(map1);params.put("list",list);// 或模板在静态资源的相对路径File rootFile = new File((ResourceUtils.getURL("classpath:").getPath()));File templateFile = new File(rootFile, "/static/templates/exportWord.docx");//jar包获取不到文件路径`//URLDecoder.decode() 解决获取中文名称文件路径乱码String templatePath = URLDecoder.decode(templateFile.getPath());//生成文件名String fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + "_" + System.currentTimeMillis();// 导出woldtry {// 导出Word文档为文件XWPFTemplate template = XWPFTemplate.compile(templatePath,builder.build()).render(params);// 将导出的Word文件转换为流response.setContentType("application/octet-stream");response.setHeader("Content-disposition","attachment;filename=\""+fileName+".docx"+"\"");// HttpServletResponse responseOutputStream out = response.getOutputStream();BufferedOutputStream bos = new BufferedOutputStream(out);template.write(bos);bos.flush();out.flush();// 最后不要忘记关闭这些流。PoitlIOUtils.closeQuietlyMulti(template, bos, out);} catch (Exception e) {System.out.println("导出Word文档时出现异常:" + e.getMessage());}}

3.导出结果

在这里插入图片描述

http://www.lryc.cn/news/396416.html

相关文章:

  • 指定版本ceph-common安装
  • C++语言特性——关键字(static、volatile、extern、const、mutable、inline)
  • 在Ubuntu 16.04上安装和配置VNC的方法
  • @RequestBody注解的使用及源码解析
  • linux 服务器数据备份 和 mysql 数据迁移
  • 安防视频监控/云存储/视频汇聚EasyCVR平台播放设备录像不稳定,是什么原因?
  • S32V234平台开发(一)快速使用
  • C# 如何防止反编译?C#程序加密混淆保护方法大全
  • 企业数字化转型中的低代码开发平台应用:释放创新潜能
  • 因为目录问题开通的另外一个网站的美化过程
  • RedHat运维-Ansible自动化运维基础24-寻找问题常用模块
  • windows USB 设备驱动开发-USB带宽
  • 哪有什么「历史的垃圾时间」,有的只是你对自己的不诚实
  • 全志A527 T527 android13支持usb摄像头
  • 邦芒贴士:做到这8点工作生活中才能少犯错
  • 代码随想录算法训练营第7天
  • 苹果开发者取消自动续费
  • Phospho:LLM应用的文本分析利器
  • 微深节能 料场堆取料无人操作系统 格雷母线
  • Invoice OCR
  • 无菌隔离器内操作规范性的验证之气流流型验证-北京中邦兴业
  • 【YOLOv8系列】(一)YOLOv8介绍:实时目标检测的最新突破
  • 如何视频提取字幕?推荐5款视频字幕提取软件
  • 独孤思维:副业项目实操3天出单了
  • 包装器 std::function
  • Java | Leetcode Java题解之第219题存在重复元素II
  • 800 元打造家庭版 SOC 安全运营中心
  • vite项目使用qiankun构建hash路由微前端
  • 通过rpmbuild构建Elasticsearch-7.14.2-search-guard的RPM包
  • js 图片放大镜