使用Apache POI生成Word目录遇XmlValueOutOfRangeException错误求助
解决Apache POI 5.2.3生成Word目录时的XmlValueOutOfRangeException错误
问题原因
在POI 5.x版本中,CTSimpleField的setDirty(STOnOff)方法存在XMLBeans类型兼容问题,直接传入STOnOff.TRUE会触发枚举值与XML union类型不匹配的错误。
解决方案
替换原代码中设置dirty属性的行,直接通过DOM节点设置dirty属性为"true",绕过XMLBeans的枚举处理:
修改前代码:
toc.setDirty(STOnOff.TRUE);
修改后代码:
// 直接操作DOM节点设置dirty属性 toc.getDomNode().setAttribute("dirty", "true");
完整的生成目录代码示例:
XWPFParagraph paragraph = document.createParagraph(); CTP ctP = paragraph.getCTP(); CTSimpleField toc = ctP.addNewFldSimple(); toc.setInstr("TOC \\* MERGEFORMAT"); // 替换原setDirty方法,直接设置DOM属性 toc.getDomNode().setAttribute("dirty", "true");
说明
直接操作DOM节点设置属性可以避免XMLBeans对STOnOff枚举的类型校验问题,确保Word文档能正确识别目录的dirty标记,打开文档时会提示更新目录。
内容的提问来源于stack exchange,提问作者Ramzan Niazi
相关产品推荐
相关产品推荐

