项目场景:
根据word文档合同模板替换变量。例如:
模板中有 签署日期:{{year}}年{{month}}月{{day}}日
在生成实际的合同文档时,year变量会替换2023,month替换成09,day替换成07。
问题描述
当格式不对,或者初创的文档用office软件编辑的,更改的时候用wps修改的。或者不同的人编辑了文档等等。这些可能会导致变量替换时报数据越界异常。特别是多个变量连在一块时会出现这种情况。
[2023-09-07 09:10:06.913] [ERROR] [http-nio-8080-exec-1] [com.WordUtils] - 生成文件有限公司【1号30期】认购协议.docx出错!
java.lang.StringIndexOutOfBoundsException: String index out of range: -52
原因分析:
经debug跟踪代码发现ParseWord07类中的方法parseThisParagraph在解析变量时,会将{{year}}年解析成
{{year}}年{{ ,这样会导致PoiPublicUtil.getRealValue中
```java
params = currentText.substring(currentText.indexOf("{{") + 2, currentText.indexOf("}}"));
这行代码报错。
# 解决方案:
在年月日的前后各加一个空格即可