poi操作word替换模板向指定位置添加图表
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替换模板向指定位置添加图表相关推荐
- 踩坑日记--poi操作word替换图片显示问题
说明 最近遇到一个比较坑的问题,就是使用poi操作word文档,通过替换书签的方式替换成图片时,图片在word中显示正常,但是通过libreoffice转成pdf时显示不全.经过测试发现,图片插入到w ...
- Java poi 操作word替换模版中固定参数(页眉、段落、表格)
近期碰到一个稍微头疼的需求,将word模版中的参数替换为实际值,其中包括段落.列表(行数不够时自动递增).页眉:本文以docx文档为例,其中代码有其他地方参考,如有冒犯,还请海涵: 模版: 实现效果: ...
- java word apache poi 操作word模板。
apache poi 操作word模板. 操作方式: 1.对于固定格,可以遍历格子然后替换其中指定的值例如在要替换的cell写入${example} 这样格式,遍历到之后替换. 2.对于需要增长的表格 ...
- java使用poi操作word模板,插入图片、段落、表格
java使用poi操作word插入图片.段落.表格 其他链接 准备工作 创建word模板.docx文件 编写模板格式.xml文件 java上手poi maven依赖 使用到的包 具体应用 对应封装方法 ...
- 报表技术2(百万数据导入导出,POI操作word)
POI模板导出,操作word 导出用户详情数据(图片,公式处理) 使用模板导出用户详细信息 使用模板引擎 1.编写模板引擎 2.使用模板引擎 百万数据导出 代码实现: 百万数据导入 步骤分析: 1.自 ...
- python-docx对Word文档的指定位置(批量)插入图片
python-docx对Word文档的指定位置(批量)插入图片 任务 实现自动化办公,对请假条.docx文件实现自动插入请假人签名图片. 技术方案 1.python-docx python-docx是 ...
- 【JAVA - POI 合集】之 POI 操作word 图表,柱状图,折线图,雷达图,条形图 poi4.1.2
1.前言 关于poi 操作word 的吐槽: 山路崎岖, 一言难尽啊!!! 原本项目中的poi 版本是3.17的版本,但是3.17对于在word 中操作图表是有问题的.所以对项目的jar 包进行了升级 ...
- poi操作word文档总结
POI分段落生成纯Word动态模板并导入数据 导出数据,可以用word另存为xml格式的ftl文件,变量用${变量名}表示,然后在类中通过 freemarker去替换变量. 但是怎么导入word数据. ...
- Java使用Poi填充Word表格模板(图片和文字)
Java使用Poi填充Word表格模板(图片和文字) **** 由于个人需求需要对表格模板进行操作,所以本文章只对表格进行替换数据操作,没有段落,没有循环遍历,没有延伸!!!!!(后续补充!!!) * ...
最新文章
- CentOS 6.0配置pptp ××× Client和Squid透明网关
- 使用java+TestNG进行接口回归测试
- NEO改进协议提案2(NEP-2)
- 市面上主流的TCC框架介绍
- python traceback对象_Python traceback【转】
- Bellman-Ford算法和SPFA算法
- [Swift通天遁地]一、超级工具-(2)制作美观大方的环形进度条
- HDFS NameNode重启优化
- CAS的ABA问题及解决方案
- 创建完虚拟环境后安装pytorch
- TOMCAT中使用HTTPS的过程
- jsp足球俱乐部管理系统Myeclipse开发sqlserver数据库web结构c#编程计算机网页项目
- BugkuCTF:宽带泄露;隐写2
- html获取当前网页ip和端口,js获取当前访问者的IP地址和所属地市代码
- 寂静岭3java攻略_《寂静岭3》完整流程攻略
- 洗地机那个牌子好?洗地机品牌排行榜
- 安永亚太技术实验室在深圳成立;松下能源将为Lucid Air豪华电动汽车供应锂离子电池 | 美通企业日报...
- 基于Python实现的默克尔树
- 2017lao蒋全程2017词汇班(真题词汇特训二)
- Navicat连接mysql报错