为了账号安全,请及时绑定邮箱和手机立即绑定

变量替换有时不起作用

变量替换有时不起作用

慕尼黑8549860 2023-03-31 10:09:58
我将 docx 文件作为模板,在使用 Microsoft Word 编写变量 (${}) 时,看不到一些变量但是当我在 LibreOffice 上更改它时,它正在工作(java 看到变量),但我不能每次使用 LibreOffice 都这样做!File doc = new File("nameOfMyFile.docx");WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(doc);MainDocumentPart mainDocumentPart = wordMLPackage.getMainDocumentPart();HashMap mappings = new HashMap();VariablePrepare.prepare(wordMLPackage); mappings.put("lessonsEachWeek", contract.getHoursInWeek());wordMLPackage.getMainDocumentPart().variableReplace(mappings);Docx4J.save(wordMLPackage, new File("someName.docx"));Docx 文件的 XML:<w:r>                            <w:rPr>                                <w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:eastAsia="Times New Roman" w:cs="Times New Roman"/>                                <w:color w:val="000000"/>                                <w:lang w:eastAsia="ru-RU"/>                            </w:rPr>                            <w:t xml:space="preserve">1.2 some text ${</w:t>                        </w:r>                        <w:r>                            <w:rPr>                                <w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:eastAsia="Times New Roman" w:cs="Times New Roman"/>                                <w:color w:val="000000"/>                                <w:lang w:val="en-US" w:eastAsia="ru-RU"/>                            </w:rPr>                            <w:t>lessonsEachWeek</w:t>                        </w:r>
查看完整描述

1 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

根本原因

lessonsEachWeekWord 的文本校对功能将文本包装到一些标记中,将其从${}标记中分离出来。</w:t></w:r><w:r><w:rPr>...lessonsEachWeek...</w:rPr><w:t xml:space="preserve">给定这样的文档,docx4j当然会尝试在没有这样的密钥的情况下找到密钥的替代品。

解决方案

不幸的是,对于现有文档,我无法找到自动且优雅的方式来删除这些包装标签。由于某些原因,禁用 Word 中的拼写检查、重新检查和保存文档不起作用。我做了一些“手动手术”:在 7z 中打开 docx 文件作为 zip 文件,位于其中的 \word\document.xml,F4(编辑)并删除这些包装标签。7z 重新打包的 zip 文件,Word 仍然可以毫无问题地打开它,而我的 Java / Kotlin 应用程序现在可以替换已修复的密钥!任何类似的存档器和编辑器也应该可以做到这一点。

如何在新文档中避免此问题

创建此类模板时,请在 Word 中禁用文本校对。

“文件”->“选项”->“校对”,取消选中“在 Word 中更正拼写和语法时”部分中的所有复选框。


查看完整回答
反对 回复 2023-03-31
  • 1 回答
  • 0 关注
  • 121 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信