You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Java项目更换docx模板时初始化WordDocument抛出NumberFormatException求助

问题分析与解决方案

嘿,从你给出的堆栈跟踪信息一眼就能看出问题所在——你的新order.docx模板里的表格宽度包含了带小数的数值(比如堆栈里的11340.0),而你使用的Independentsoft Office Word库在解析表格宽度时,试图把这个带小数的字符串直接转换成Integer类型,这就触发了NumberFormatException

下面是具体的原因排查和解决方法:

可能的原因及对应解决步骤

1. 模板表格的宽度设置带小数

这是最常见的情况:你在编辑新模板时,表格的宽度设置了带小数的数值,或者通过单位转换(比如从厘米/英寸转成Word内部的缇单位)产生了小数。

  • 解决方法:
    1. 打开新的order.docx,找到所有表格。
    2. 右键表格 → 选择「表格属性」。
    3. 在「表格」或「列」标签页里,把宽度值调整为整数(可以切换单位,比如从百分比改成固定值,确保数值是整数)。
    4. 保存模板后重新测试代码。

2. DOCX底层XML里的宽度值带小数

有时候在Word里调整后,底层的XML文件可能依然保留带小数的宽度值(比如<w:w val="11340.0"/>这种格式),而库无法识别这种格式。

  • 解决方法:
    1. order.docx的后缀改成.zip,解压这个压缩包。
    2. 打开解压后的word/document.xml文件。
    3. 搜索所有包含.0的宽度值(比如搜索val="*.0"),把这些值改成整数(比如11340.0改成11340)。
    4. 重新把文件打包成zip,再改回.docx后缀,然后测试代码。

3. 所用Independentsoft库版本过低

旧版本的Independentsoft Office Word库可能没有处理带小数宽度值的逻辑,新版本可能修复了这个兼容性问题。

  • 解决方法:尝试升级你项目中使用的Independentsoft库到最新版本,再重新加载模板测试。

验证方法

修改完模板或升级库之后,重新执行你的代码:

WordDocument document = new WordDocument(templatesDirectory + "order.docx");

如果不再抛出NumberFormatException,就说明问题解决了。

内容的提问来源于stack exchange,提问作者KseniyaK

火山引擎 最新活动