java根据Word模板实现动态填充导出图表,列表

news/2025/1/7 23:24:04/

本文基于文章【动态导出Word文档,poi-tl的前世今生及快速使用】,对文本、表格、图片、列表、图表等做详细的示例记录。

快速开始

  • 引入依赖
java"><dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.2</version>
</dependency>
  • 文本输出数据
java">/**
* 填充数据源- 文本数据
*/
public static Map<String, Object> textData(Map<String, Object> data) {//key要与模板中的别名一一对应data.put("custNo", "嘎嘎嘎");data.put("custCnName", "样式文本");data.put("productCategory", Texts.of("超链接").link("http://www.baidu.com.cn").create());data.put("orgKey", "4433");data.put("attachRealName", Texts.of("锚点文本").anchor("custNo").create());data.put("riskLevel", "1001");return data;
}
  • 表格数据
java">/*** 填充数据源- 表格数据*/
public static Map<String, Object> tableData(Map<String, Object> map) {List<Map<String,Object>> list = new ArrayList<>();//1  表格1map.put("table0", Tables.of(new String[][] {new String[] { "表头1", "表头1" ,"表头三"},new String[] { "数据1", "数据2","数据3" }}).border(BorderStyle.DEFAULT).create());//2  表头居中且设置背景色的表格RowRenderData row0 = Rows.of("姓名", "学历","年龄").textColor("FFFFFF").bgColor("4472C4").center().create();RowRenderData row1 = Rows.create("张三", "博士","18");RowRenderData row2 = Rows.create("李四", "本科","20");map.put("table1", Tables.create(row0, row1,row2));//3  合并第1行所有单元格的表格RowRenderData row00 = Rows.of("111", "222", "333").center().bgColor("4472C4").create();RowRenderData row11 = Rows.create("没有数据", null, null);//规定合并单元格规则MergeCellRule rule = MergeCellRule.builder().map(MergeCellRule.Grid.of(1, 0), MergeCellRule.Grid.of(1, 2)).build();map.put("table2", Tables.of(row00, row11).mergeRule(rule).create());return map;
}
  • 列表数据
java">/*** 填充数据源- 列表数据*/
public static Map<String, Object> listData(Map<String, Object> map) {ArrayList<String> strings = new ArrayList<>();strings.add("大白菜");strings.add("胡萝卜");strings.add("牛肉");map.put("list1",strings);/***  指定列表样式*  DECIMAL //1. 2. 3.*  DECIMAL_PARENTHESES //1) 2) 3)*  BULLET //● ● ●*  LOWER_LETTER //a. b. c.*  LOWER_ROMAN //i ⅱ ⅲ*  UPPER_LETTER //A. B. C.*/map.put("list2", Numberings.of(NumberingFormat.DECIMAL).addItem("香蕉").addItem("苹果").addItem("橘子").create());return map;
}
  • 图表数据
java">/*** 填充数据源-图表*/
public static Map<String, Object> chartData(Map<String, Object> map) throws Exception{//柱形图ChartMultiSeriesRenderData chart = Charts.ofMultiSeries("全国医院综合排名", new String[] { "友好医院","泰山医院","协和医院","第二人民医院","第三医院"}).addSeries("数据排名", new Double[] { 60.5,50.6,85.4,29.7,35.4}).addSeries("价格排名", new Double[] { 50.5,65.6,75.4,82.7,95.4}).create();map.put("barChart", chart);//折线图ChartMultiSeriesRenderData qst = Charts.ofMultiSeries("成长趋势", new String[] { "07-10","07-11","07-12","07-13","07-14","07-15"}).addSeries("公众号", new Double[] { 60.5,40.6,22.7,85.4,500.0,40.8}).addSeries("抖音", new Double[] { 40.5,50.6,62.7,45.4,160.0,440.8}).addSeries("小红书", new Double[] { 170.5,520.6,362.7,305.4,200.0,140.8}).create();map.put("zxtChart", qst);//饼图ChartSingleSeriesRenderData pie = Charts.ofSingleSeries("各省份GDP对比", new String[] { "河南", "四川","北京","上海" }).series("经济占比", new Integer[] { 50, 35,60,55 }).create();map.put("pieChart", pie);//组合图表ChartMultiSeriesRenderData comb = Charts.ofComboSeries("技术语言成长", new String[] { "java", "Python" }).addBarSeries("2021", new Double[] { 15.0, 6.0 }).addBarSeries("2022", new Double[] { 223.0, 119.0 }).addLineSeries("2023", new Double[] { 323.0, 89.0 }).addLineSeries("2024", new Double[] { 123.0, 59.0 }).create();map.put("zhChart", comb);//柱状图、折线图组合ChartMultiSeriesRenderData hntb = Charts.ofComboSeries("河南城市排名", new String[] { "南阳","郑州","洛阳","信阳","驻马店","安阳"}).addBarSeries("GDP",new Double[] {50.5,40.6,32.7,85.4,500.0,49.8}).addBarSeries("人口",new Double[] {60.5,50.6,82.7,45.4,300.0,120.8}).addLineSeries("指数",new Double[] {10.5,50.3,30.7,80.4,20.3,40.8}).create();map.put("gcChart", hntb);return map;
}
  • 文档生成示例
java">@GetMapping("/getWordFile")
public void getWordFile(){try {String filePath = "G:\\产品详情.docx";//模板路径Map<String,Object> dataMap = getData();log.info("响应信息:{}",dataMap);String custCnName = dataMap.get("custCnName")+"";InputStream inputStream = new FileInputStream(filePath);String fileName = custCnName + "-产品风险查询详情";String url = "G:\\"+fileName + ".docx";//解析模板XWPFTemplate template = XWPFTemplate.compile(filePath);//渲染数据template.render(dataMap);//以文件形式输出template.writeAndClose(new FileOutputStream(url));} catch (Exception e) {log.error("导出异常:{}",e);throw new RuntimeException(e);}
}public Map<String, Object> getData() throws Exception {Map<String, Object> map = new HashMap<>();map = textData(map);map = tableData(map);map = tableData1(map);map = imgData(map);map = listData(map);map = chartData(map);return map;
}
  • 准备模板
    文本:直接使用{{属性}}
    在这里插入图片描述
    列表:以*开头,使用{{*list}}
    在这里插入图片描述
    图片:以@开头,使用{{@img}}
    表格:以#开头,使用{{#table}}
    在这里插入图片描述
    图表
    1. 在模板中插入需要使用的图表
      在这里插入图片描述
    2. 在图表空白处右键 -> 选择设置图表区域格式 -> 文本选项 -> 可选文字-> 在标题中设置属性{{pieChart}}
      在这里插入图片描述
  • 文档生成示例
    文本
    在这里插入图片描述
    图片&表格
    在这里插入图片描述
    列表
    在这里插入图片描述
    图表
    a. 饼图&柱状图
    在这里插入图片描述
    b. 折线图:
    在这里插入图片描述
    c. 组合图:
    在这里插入图片描述
    d. 折线&柱状图组合:
    在这里插入图片描述
    更多使用,参见官方文档。
    仓库地址:
    https://gitcode.com/gh_mirrors/po/poi-tl/overview
    文档地址:
    https://deepoove.com/poi-tl/#_why_poi_tl

参考:文章 FC464782123


http://www.ppmy.cn/news/1560996.html

相关文章

面向对象分析和设计OOA/D,UML,GRASP

目录 什么是分析和设计&#xff1f; 什么是面向对象的分析和设计&#xff1f; 迭代开发 UML 用例图 交互图 基于职责驱动设计 GRASP 常见设计原则 什么是分析和设计&#xff1f; 分析&#xff0c;强调是对问题和需求的调查研究&#xff0c;不是解决方案。例如&#x…

java基础学习——java集合简单介绍及使用

集合概述 曾经如果想要保存一组数据&#xff0c;我们通常使用数组来实现&#xff0c;但是数组有一个致命缺点&#xff1a;就是定长&#xff0c;数组一旦被创建&#xff0c;长度就是固定的&#xff0c;无法改变&#xff0c;如果想要添加或删除一个数据&#xff0c;是无法在原数…

【C++】B2103 图像相似度

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述题目原文输入格式输出格式样例 &#x1f4af;题目分析目标核心公式输入规模 &#x1f4af;两种解法对比我的做法核心思路代码实现思路解析优点缺点 老师的做法核心…

Python爬虫入门指南:从零开始抓取数据

Python爬虫入门指南&#xff1a;从零开始抓取数据 引言 在大数据时代&#xff0c;数据是新的石油。而爬虫作为获取数据的重要手段&#xff0c;受到了越来越多的关注。Python作为一门强大的编程语言&#xff0c;其简洁易用的特性使得它成为爬虫开发的首选语言。本篇文章将带你…

使用扣子实现营销获客套电机器人-工作流+多维表格+飞书机器人

V: llike620 就是利用扣子的工作流&#xff0c;实现简单的获取线索机器人&#xff0c;然后对接在抖音音私信上 主要用于某汽车贴膜产品的获客&#xff0c;先获取车型&#xff0c;再获取联系方式 增加了状态机制&#xff0c;不能让对方跳过业务流程 新线索存入飞书多维表格&…

Linux -- 单例模式

目录 概念 主要特点 饿汉模式和懒汉模式 饿汉模式 懒汉模式 应用场景 单例模式下的线程池 GetInstance 函数&#xff1a; 单例模式禁止赋值和拷贝&#xff1a; 完整代码&#xff1a; 概念 单例模式是软件工程中的一种设计模式&#xff0c;属于创建型模式。它确保一…

基于氢氧燃料电池的分布式三相电力系统Simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于氢氧燃料电池的分布式三相电力系统Simulink建模与仿真&#xff0c;仿真输出燃料电池中氢氧元素含量变化以及生成的H2O变化情况。 2.系统仿真结果 3.核心程序与模型 版本…

Cursor连接腾讯云Cloud Studio开发环境

文章目录 环境准备Cloud StudioCursor Cursor连接Cloud Studio开发环境 环境 腾讯云Cloud Studio语言模板All In One实例Windows 11Firefox 133.0.3 (64 位)Cursor 0.44.9 准备 Cloud Studio 在腾讯云Cloud Studio&#xff08; https://ide.cloud.tencent.com/ &#xff09…