java poi 操作word文本,图表,遇到的问题

  • 直接上问题
    • 模板字段匹配问题
    • 图表问题
      • 图表导出
      • 问题:模板找不到对应图表
      • 问题:数据填充后效果不达目标
      • 图表中为零的数值去掉(!!!模板层面解决不掉)
        • 代码层面 散点图+折线图的组合图举例子
        • 导出后修改world
        • 最终效果
    • 操作的图表未覆盖到你想要的?
      • POI中提供的图标具体实现类
      • 修改【"二"】中提供的枚举类 添加3D饼图为例

之前做过 一期 poi操作world 的文章. 然后前一段因为工作要求改版,改了很多很多版,模板也花里胡哨了,今天就把我出文章之后又遇到的问题做个汇总,然后再过一段时间把重构等装好的 代码也分享出来(近期努力再写)

直接上问题

模板字段匹配问题


(1).首先要确保,你读的模板是当前你修改的这个。

(2).用工具打开,确保${AAAAAA}是真正连接在一起的。

(3).用工具打开,确保${AAAAAA}是单独连接在一起的。(条目二起效则忽略) 如果是下图 就分开


(4).条目三拆分字符和匹配字符建议在模板选择一个不同的模板格式刷向你需要的目标(${AAAAAA}这九个字符),在用目标的格式刷回来

(5).利用同一行匹配的问题可以做到下面的效果(A:钓鱼,B null) 适合用于 if{}else{}:

图表问题

图表导出

整理模板操作:java使用poi操作world生成饼图,柱状图,折线图,组合图:一.
java操作模板:java使用poi操作world生成饼图,柱状图,折线图,组合图:二.

问题:模板找不到对应图表

(1).确认读取模板是否正确
(2).更换图表对应下标 读取到图表的集合会乱!!!
(3).确认模板中是否存在对应图表 在图表处右键【更改图表类型】

问题:数据填充后效果不达目标

(1)点击图表找到筛选按钮 点击筛选按钮 就会刷新数据 (难受啊!!! 我没找到代码层面解决方法)


(2).饼图数值和百分比

图表中为零的数值去掉(!!!模板层面解决不掉)

设置后会把想要的数据也会给清楚 一些为零且需要展示的数据 赋值成【1】

代码层面 散点图+折线图的组合图举例子

修改:java操作模板:java使用poi操作world生成饼图,柱状图,折线图,组合图:二中
工具类:枚举解析图表类中:
散点图:ChartsEnum.SCATTER.【 fillModel() 】方法(189行):共七行代码
数值为0的数据设置为1,在:(测试类:组合图表(入口) 45行)

/*** 填充模板数据* @param chartModel 图表和数据源* @param xmlObject 当前元素* @param bias 偏向值*/@Overridepublic void fillModel(ChartModel chartModel,XmlObject xmlObject,int bias) {if (!this.chartImplClazz.getName().equals(xmlObject.getClass().getName())) {//当前循环中图表操作不属于当前枚举ChartsEnum.getEnumByChartImplClazz(((XmlComplexContentImpl)xmlObject).getClass()).fillModel(chartModel, xmlObject, bias);return;}CTScatterChart chart = (CTScatterChart)xmlObject;List<CTScatterSer> serList = chart.getSerList();//设置隐藏单元格CTDispBlanksAs disp = CTDispBlanksAs.Factory.newInstance();disp.setVal(STDispBlanksAs.GAP);chartModel.getCtChart().setDispBlanksAs(disp);//更新数据区域for (int i = 0; i < serList.size(); i++) {//设置隐藏单元格CTBoolean ctBool = CTBoolean.Factory.newInstance();ctBool.setVal(false);CTScatterSer ctScatterSer = (CTScatterSer) serList.get(i);ctScatterSer.setSmooth(ctBool);//数据填充CTScatterSer ser = chart.getSerArray(i);CTAxDataSource cat = ser.getXVal();CTNumDataSource val = ser.getYVal();this.dataAnalysisFill(chartModel,i,bias,cat,val);}}

导出后修改world


最终效果

操作的图表未覆盖到你想要的?

POI可操作图表有很多,没有能全覆盖!!!【添加新的很简单】

POI中提供的图标具体实现类

Class<? extends XmlObject>继承XmlObject的实现类
Class<? extends XmlComplexContentImpl> chartImplClazz继承XmlComplexContentImpl的实现类

//一.进入getPlotArea方法
CTChart ctChart;
ctChart.getPlotArea();//二.进入CTPlotArea类
CTPlotArea getPlotArea();//三.这是个接口 进入它的实现类只有一个
public interface CTPlotArea extends XmlObject {}//四.实现类中定义了那些可操作的图表
public class CTPlotAreaImpl extends XmlComplexContentImpl implements CTPlotArea {}

修改【“二”】中提供的枚举类 添加3D饼图为例

主要修改的是枚举,其他的我暂时未想到有什么可以修改的

     /*** 3D饼图*/PIE_3D(CTPie3DChart.class, CTPie3DChartImpl.class){@Overridepublic void fillModel(ChartModel chartModel, XmlObject xmlObject, int bias) {if (!this.chartImplClazz.getName().equals(xmlObject.getClass().getName())) {//当前循环中图表操作不属于当前枚举ChartsEnum.getEnumByChartImplClazz(((XmlComplexContentImpl)xmlObject).getClass()).fillModel(chartModel, xmlObject, bias);return;}CTPie3DChart pie3DChart = (CTPie3DChart)xmlObject;List<CTPieSer> serList = pie3DChart.getSerList();//更新数据区域for (int i = 0; i < serList.size(); i++) {//数据填充//CTPieSer ser = pie3DChart.getSerArray(i);CTAxDataSource cat = ser.getCat();CTNumDataSource val = ser.getVal();this.dataAnalysisFill(chartModel,i,bias,cat,val);}}@Overridepublic XmlObject getTargetChart(int chartSeat, CTChart ctChart, int xmlObjSeat) {try {CTPie3DChart pie3DChart = ctChart.getPlotArea().getPie3DChartArray(xmlObjSeat);return pie3DChart;}catch (Exception e){throw new RuntimeException("当前位置【" + chartSeat + "】不存在【3D饼图】!!!");}}},

对比代码可以看到,只需要修改具体实现的类 【getTargetChart(),fillModel(),PIE_3D()】为你想要的具体图表对应的实现类

java poi 操作word遇到的问题相关推荐

  1. java poi操作word 2003 2007

    实现java 替换 word中指定内容,实现word2003 版本 很轻松的 完成了,可是到2007版本时缺头疼了.因为在网上查找的很多相关例子都是需要删除哪一行的信息在setText 添加进去这样不 ...

  2. java poi操作word模版 导出word文档(附工具类)

    模板格式 合同编号:{ contractNumber},合同序号:{ contractSequence} 买家: { buyerName} 卖家:{ sellerName} 业务员: { salesN ...

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

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

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

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

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

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

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

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

  7. POI操作Word设置表格在字体加粗【XWPFTableCell设置字体】Java操作Word调样式

    Jar包的版本号:[不同的版本号也许也可以,可以尝试一下,哈哈哈哈~] ----------因为代码在内网环境中无法复制出来,所以这里就截图了,兄弟们自己敲一下键盘吧~ POI操作Word设置表格在字 ...

  8. 使用poi操作word

    导入依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifa ...

  9. POI 操作word

    关于POI 操作word的基础知识在这个博客(http://elim.iteye.com/blog/2049110)中有非常清晰的解释,在这里我就不多解释了 本文研究的内容就是 XWPFParagra ...

最新文章

  1. allgro显示网络名称_家里的路由器如何隐藏WiFi名称防止陌生人蹭网?SSID隐藏教程...
  2. LFU的多种实现方式,从简单到复杂,新手必看
  3. 深入理解RunLoop(转载)
  4. 搞懂Java分布式锁实现看这篇文章就对了
  5. 学三极管能遇到这篇巧文,我太幸福了!
  6. java清除浏览器记录_java – 如何在Selenium测试中清除浏览器缓存
  7. java enumerator_NSEnumerator使用
  8. Hadoop入门基础教程 Hadoop之单机模式搭建
  9. pychar创建一个flask项目
  10. 无意间把你的个人资料当圣诞礼物,送给了网络犯罪份子吗?
  11. sublime3 多行编辑.摘抄
  12. Excel如何快速方便生成随机姓名
  13. 最强卸载工具,彻底卸载无残留IObit Uninstaller 9.0.2.40
  14. 计算机证件照颜色,更换证件照底色只需10秒,关键还不要钱!这4种方法你一定要学...
  15. Tik Tok账号被封了怎么办?
  16. 智能家居研究:深耕用户体验实现核心业务17.3%增长
  17. python安装os模块_python安装os
  18. 昆明发生两起公汽爆炸案2死10伤
  19. 推荐一本书——半小时漫画中国史
  20. win10远程桌面连接报错(出现身份验证错误。要求的函数不受支持。CredSSP 加密数据库修正)解决办法

热门文章

  1. Python基础:68 个 Python 内置函数详解
  2. Edge检查更新时出错:无法连接到Internet。如果使用防火墙,请将 MicrosoftEdgeUpdate.exe 加入允许列表中。
  3. 义隆循环左移c语言,二进制除法运算(义隆单片机)
  4. react里面 内联css样式怎么样_简单的使用Radium管理React中的内联样式
  5. 解决Git使用出现git@githubcom Permission denied (publickey)
  6. fabs在python中是什么意思_Python fabs() 与 abs() 区别是什么?
  7. vue项目报错in ./src/app.vue?vuetype=styleindex=0lang=less
  8. linux系统指令带有单引号是啥意思,每天一个Linux命令之shell单引号和双引号的经典解释...
  9. Win11终端管理员打不开解决方法
  10. DirectX是什么,出现游戏打不开问题解决方案