Apache POI 5+中如何获取XSLFTableCell的BlipFill?
Apache POI 5.2.3 表格单元格BlipFill 解决方案
这不是POI的缺陷,是新版本对OOXML封装逻辑的调整,更推荐使用高层API而非直接操作底层XML结构。下面给你两种可行的解决途径:
方案一:通过底层CT对象操作(兼容原逻辑)
新版本中依然可以通过获取单元格的底层CTTc对象来操作TcPr,替换原代码里的getXmlObject()为更明确的getCTTc()即可:
CTTc ctTc = cell.getCTTc(); CTTcPr tcPr = ctTc.getTcPr() != null ? ctTc.getTcPr() : ctTc.addNewTcPr(); CTBlipFillProperties blipPr = tcPr.addNewBlipFill(); // 后续继续操作blipPr完成图片添加逻辑
方案二:反射访问PaintStyle内部BlipFill(不推荐)
如果一定要基于getFillPaint()返回的PaintStyle对象操作,可以通过反射突破包访问权限获取内部BlipFill实例,但这种方式依赖POI私有实现,后续版本更新可能失效:
PaintStyle paintStyle = cell.getFillPaint(); if (paintStyle.getClass().getSimpleName().equals("BlipFill")) { java.lang.reflect.Field blipField = paintStyle.getClass().getDeclaredField("blipFill"); blipField.setAccessible(true); CTBlipFillProperties blipPr = (CTBlipFillProperties) blipField.get(paintStyle); // 后续操作 }
优先选择方案一,稳定性和可维护性更强。
内容的提问来源于stack exchange,提问作者Kein H
相关产品推荐
相关产品推荐

