【问题标题】:OpenXML freeze-fixed ID for w:tagsw:tags 的 OpenXML 冻结固定 ID
【发布时间】:2016-07-22 17:13:09
【问题描述】:

我有一个 java 程序,可以在 document.xml(解压缩的 DOCX)中搜索 rsidR="00CA303F"

<w:sdtContent>
<w:r w:rsidR="00CA303F">
    <w:rPr>
        <w:rFonts w:cs="Arial"/>
        <w:b/>
        <w:sz w:val="18"/>
        <w:szCs w:val="18"/>
        <w:lang w:val="en-US"/>
    </w:rPr>
    <w:t>17-Jan-14</w:t>
</w:r>
</w:sdtContent>

问题:如果我更改了 docx 中的日期之类的内容,并且在我保存文件后,这个 rsidR 更改! 我下次找不到它在我的程序中。

我怎样才能冻结它?或者我可以将哪些其他固定元素添加到 w:r 以在保存文件后找到它?

我尝试过的解决方案(不起作用):我添加了其他标签(希望它们不会改变),例如:w:rsidRDefault, w:id, w:val, w:rsidRPr to this w :r,但 Word 之后将无法打开文件 docx。

【问题讨论】:

    标签: ms-word openxml openxml-sdk


    【解决方案1】:

    Word 或 OpenXML 文件格式不提供向元素添加 ID 的直接方法,如果编辑文档,该 ID 也会保留。

    作为一种解决方法,您可以创建一个字符样式,然后将其应用于您感兴趣的文本行。然后您可以在w:val 属性中搜索具有正确字符样式的w:rStyle 元素:

    <w:r w:rsidRPr="00E05157">
        <w:rPr>
            <w:rStyle w:val="MyCharacterStyle"/>
        </w:rPr>
        <w:t>17-Jan-14</w:t>
    </w:r>
    

    【讨论】:

    • 首先感谢答案,我尝试了您的解决方案,但是在保存文件 docx 后,您的所有代码都被我在第一篇文章中编写的相同代码覆盖(我不知道为什么),如果你想xml的其他部分我可以毫无问题地给你。
    • @Diego87:如果您将字符样式应用于文档中的文本部分并保存文件,则字符样式也将写入输出文档,就像我的示例 Open XML 中一样。
    • 17-Jan-14 错误在哪里?你的样品是一样的吗?如果我保存 docx,此代码将在没有 w:rStyle 的情况下被覆盖(我很新与 ooxml,sry)
    • @Diego87:您还需要确保字符样式是有效的现有字符样式。如果文档中尚不存在字符样式,则必须添加它。
    • 肯定存在,因为我从同一文档上的其他 w:rStyle 复制了它
    【解决方案2】:

    应该可以为包含w:sdt(在后代w:sdtPr/w:id/@w:val)分配一个唯一的ID。例如,请参阅sdtPr 的 docx4java 文档。

    What's up with all those rsid's 中可以很好地解释rsid 以及MS Word 如何使用它们。在许多应用程序中,完全忽略它们是无害的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-11
      • 2013-06-01
      • 2010-09-20
      • 2012-05-26
      • 2017-08-14
      • 2017-06-19
      相关资源
      最近更新 更多