poi操作word替换模板向指定位置添加图表

首先是引入pom文件

         <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.xmlbeans</groupId><artifactId>xmlbeans</artifactId><version>3.1.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>ooxml-schemas</artifactId><version>1.4</version></dependency>

3.x低版本的好像没有插入图表操作,我开始用的就是3.x版本的poi,没有插入图表操作,不得已才升级成了4.1.x版本的

首先是演示图
模板样式:

我们要将带有 “Chart” 字符的标签替换成图表,我从网上搜索了好多,但是就是没有找到这种替换的示例,最后我也是从网上找,加上看poi的API文档,才实现我想要的功能,在此记录一下。

实现的功能样式:


大概的就是这样,没有影响到上下任何一行,直接替换的标签。
不多说了,直接怼代码:

public static void main(String[] args) throws IOException, InvalidFormatException {// 1、创建word文档对象File file = new File("C:\\Users\\52347\\Desktop\\测试model.docx");InputStream inputStream = new FileInputStream(file);XWPFDocument document = new XWPFDocument(inputStream);Map<String, Object> map = Maps.newHashMap();map.put("${model}", "aaaaaaaaaaaaaaaaa");List<XWPFParagraph> paragraphs = document.getParagraphs();for (XWPFParagraph per : paragraphs) {List<XWPFRun> runs = per.getRuns();for (XWPFRun run : runs) {//获取文本的值String text = run.getText(0);if (StringUtils.isNotEmpty(text)) {if (text.indexOf("Chart") != -1) {run.setText("", 0);// 2、创建chart图表对象,抛出异常XWPFChart chart = document.createChart(run, 15 * Units.EMU_PER_CENTIMETER, 10 * Units.EMU_PER_CENTIMETER);chart.setChartTopMargin(1000L);// 3、图表相关设置chart.setTitleText("使用POI创建的柱状图"); // 图表标题chart.setTitleOverlay(false); // 图例是否覆盖标题// 4、图例设置XDDFChartLegend legend = chart.getOrAddLegend();legend.setPosition(LegendPosition.TOP); // 图例位置:上下左右// 5、X轴(分类轴)相关设置XDDFCategoryAxis xAxis = chart.createCategoryAxis(AxisPosition.BOTTOM); // 创建X轴,并且指定位置xAxis.setTitle("日期(年月)"); // x轴标题String[] xAxisData = new String[]{"2021-01", "2021-02", "2021-03", "2021-04", "2021-05", "2021-06","2021-07", "2021-08", "2021-09", "2021-10", "2021-11", "2021-12",};XDDFCategoryDataSource xAxisSource = XDDFDataSourcesFactory.fromArray(xAxisData); // 设置X轴数据// 6、Y轴(值轴)相关设置XDDFValueAxis yAxis = chart.createValueAxis(AxisPosition.LEFT); // 创建Y轴,指定位置yAxis.setTitle("粉丝数(个)"); // Y轴标题yAxis.setCrossBetween(AxisCrossBetween.BETWEEN); // 设置图柱的位置:BETWEEN居中Integer[] yAxisData = new Integer[]{10, 35, 21, 46, 79, 88,39, 102, 71, 28, 99, 57};XDDFNumericalDataSource<Integer> yAxisSource = XDDFDataSourcesFactory.fromArray(yAxisData); // 设置Y轴数据// 7、创建柱状图对象XDDFBarChartData barChart = (XDDFBarChartData) chart.createData(ChartTypes.BAR, xAxis, yAxis);barChart.setBarDirection(BarDirection.COL); // 设置柱状图的方向:BAR横向,COL竖向,默认是BAR// 8、加载柱状图数据集XDDFBarChartData.Series barSeries = (XDDFBarChartData.Series) barChart.addSeries(xAxisSource, yAxisSource);barSeries.setTitle("粉丝数", null); // 图例标题// 9、绘制柱状图chart.plot(barChart);} else {//遍历mapfor (Map.Entry<String, Object> entry : map.entrySet()) {//获取map的keyString key = entry.getKey();//判断文本的值和map的key,文本中是否有和key一样的占位符if (text.indexOf(key) != -1) {//获取对应key的valueObject value = entry.getValue();//把文本的内容,key替换为valuetext = text.replace(key, value.toString());//把替换好的文本内容,保存到当前这个文本对象run.setText(text, 0);}}}}}}// 10、输出到word文档FileOutputStream fos = new FileOutputStream("C:\\Users\\52347\\Desktop\\test.docx");document.write(fos); // 导出word// 11、关闭流fos.close();document.close();}

poi操作word替换模板向指定位置添加图表相关推荐

  1. 踩坑日记--poi操作word替换图片显示问题

    说明 最近遇到一个比较坑的问题,就是使用poi操作word文档,通过替换书签的方式替换成图片时,图片在word中显示正常,但是通过libreoffice转成pdf时显示不全.经过测试发现,图片插入到w ...

  2. Java poi 操作word替换模版中固定参数(页眉、段落、表格)

    近期碰到一个稍微头疼的需求,将word模版中的参数替换为实际值,其中包括段落.列表(行数不够时自动递增).页眉:本文以docx文档为例,其中代码有其他地方参考,如有冒犯,还请海涵: 模版: 实现效果: ...

  3. java word apache poi 操作word模板。

    apache poi 操作word模板. 操作方式: 1.对于固定格,可以遍历格子然后替换其中指定的值例如在要替换的cell写入${example} 这样格式,遍历到之后替换. 2.对于需要增长的表格 ...

  4. java使用poi操作word模板,插入图片、段落、表格

    java使用poi操作word插入图片.段落.表格 其他链接 准备工作 创建word模板.docx文件 编写模板格式.xml文件 java上手poi maven依赖 使用到的包 具体应用 对应封装方法 ...

  5. 报表技术2(百万数据导入导出,POI操作word)

    POI模板导出,操作word 导出用户详情数据(图片,公式处理) 使用模板导出用户详细信息 使用模板引擎 1.编写模板引擎 2.使用模板引擎 百万数据导出 代码实现: 百万数据导入 步骤分析: 1.自 ...

  6. python-docx对Word文档的指定位置(批量)插入图片

    python-docx对Word文档的指定位置(批量)插入图片 任务 实现自动化办公,对请假条.docx文件实现自动插入请假人签名图片. 技术方案 1.python-docx python-docx是 ...

  7. 【JAVA - POI 合集】之 POI 操作word 图表,柱状图,折线图,雷达图,条形图 poi4.1.2

    1.前言 关于poi 操作word 的吐槽: 山路崎岖, 一言难尽啊!!! 原本项目中的poi 版本是3.17的版本,但是3.17对于在word 中操作图表是有问题的.所以对项目的jar 包进行了升级 ...

  8. poi操作word文档总结

    POI分段落生成纯Word动态模板并导入数据 导出数据,可以用word另存为xml格式的ftl文件,变量用${变量名}表示,然后在类中通过 freemarker去替换变量. 但是怎么导入word数据. ...

  9. Java使用Poi填充Word表格模板(图片和文字)

    Java使用Poi填充Word表格模板(图片和文字) **** 由于个人需求需要对表格模板进行操作,所以本文章只对表格进行替换数据操作,没有段落,没有循环遍历,没有延伸!!!!!(后续补充!!!) * ...

最新文章

  1. CentOS 6.0配置pptp ××× Client和Squid透明网关
  2. 使用java+TestNG进行接口回归测试
  3. NEO改进协议提案2(NEP-2)
  4. 市面上主流的TCC框架介绍
  5. python traceback对象_Python traceback【转】
  6. Bellman-Ford算法和SPFA算法
  7. [Swift通天遁地]一、超级工具-(2)制作美观大方的环形进度条
  8. HDFS NameNode重启优化
  9. CAS的ABA问题及解决方案
  10. 创建完虚拟环境后安装pytorch
  11. TOMCAT中使用HTTPS的过程
  12. jsp足球俱乐部管理系统Myeclipse开发sqlserver数据库web结构c#编程计算机网页项目
  13. BugkuCTF:宽带泄露;隐写2
  14. html获取当前网页ip和端口,js获取当前访问者的IP地址和所属地市代码
  15. 寂静岭3java攻略_《寂静岭3》完整流程攻略
  16. 洗地机那个牌子好?洗地机品牌排行榜
  17. 安永亚太技术实验室在深圳成立;松下能源将为Lucid Air豪华电动汽车供应锂离子电池 | 美通企业日报...
  18. 基于Python实现的默克尔树
  19. 2017lao蒋全程2017词汇班(真题词汇特训二)
  20. Navicat连接mysql报错

热门文章

  1. 名帖300 王铎 行书《行书帖选》
  2. 一,这份333页关于性能优化知识点的PDF你不能不看
  3. 广汉哪里可以学计算机,广汉的年轻人学门啥技术好找工作呢
  4. 2.命名空间实现机制
  5. 系统里能看服务器型号,操作系统如何查看服务器型号
  6. 安装debugserver到iPhone上
  7. 华为关于LINUX的认证,华为认证:华为TA128在LINUX下的简单设置
  8. 【力扣(LeetCode)】【C/C++】【19.删除链表的倒数第 N 个结点】
  9. input变灰禁止输入状态
  10. C# 终本案件、综合执行人、裁判文书爬虫