c# openXML 添加 cross-reference 到 table w:instrText

c# openXML add cross-reference to a table w:instrText

我正在尝试为 table 添加标题,但我无法在任何其他帖子上找到我要查找的内容。

这是我要制作的 XML。

    <w:p>
        <w:r>
            <w:fldChar w:fldCharType="begin" />
        </w:r>
        <w:r>
            <w:instrText xml:space="preserve"> REF TableRef \h </w:instrText>
        </w:r>
        <w:r>
            <w:fldChar w:fldCharType="separate" />
        </w:r>
        <w:r>
            <w:t xml:space="preserve">Table </w:t>
            </w:r>
            <w:fldSimple w:instr="SEQ Table">
                <w:r>
                    <w:rPr>
                        <w:noProof />
                    </w:rPr>
                    <w:t xml:space="preserve"> </w:t>
                </w:r>
            </w:fldSimple>
            <w:r>
            <w:fldChar w:fldCharType="end" />
        </w:r>
    </w:p>

我不知道如何获取 instrText 部分。

        <w:r>
            <w:instrText xml:space="preserve"> REF TableRef \h </w:instrText>
        </w:r>

这是 90% 的代码,谁能帮我填一下 todo。

      DocumentFormat.OpenXml.Wordprocessing.Run run2 = new DocumentFormat.OpenXml.Wordprocessing.Run(new Text() { Text = "Table ", Space = SpaceProcessingModeValues.Preserve });
      SimpleField simpleField2 = new SimpleField(new DocumentFormat.OpenXml.Wordprocessing.Run(new RunProperties(new NoProof()), new Text() { Text = " ", Space = SpaceProcessingModeValues.Preserve }));
      simpleField2.Instruction = @"SEQ " + "Table";

      DocumentFormat.OpenXml.Wordprocessing.Paragraph refP = new DocumentFormat.OpenXml.Wordprocessing.Paragraph(
        new DocumentFormat.OpenXml.Wordprocessing.Run(new FieldChar() { FieldCharType = FieldCharValues.Begin }),
        //todo instrTxt bookmark ref
        new DocumentFormat.OpenXml.Wordprocessing.Run(new FieldChar() { FieldCharType = FieldCharValues.Separate }),
        run2,
        simpleField2,
        new DocumentFormat.OpenXml.Wordprocessing.Run(new FieldChar() { FieldCharType = FieldCharValues.End })

        );

谢谢

使用示例文档和随附的 Document Reflector 可以轻松解决编写将生成特定 Open XML 文档的正确 C# 代码等问题打开XML SDK:

  1. 下载并安装最新版本的 Open XML SDK (OpenXMLSDKToolV25.msi)
  2. 打开位于 C:\Program Files (x86)\Open XML SDK\V2.5\toolOpen XML SDK 生产力工具 (OpenXmlSdkTool.exe)(当安装到默认位置时)。
  3. 使用所需 formatting/content 创建示例文档并在工具中打开示例文档。
  4. 点击反映代码
  5. 将生成的代码复制到您的项目中并根据需要进行调整,例如用您的内容替换静态文本。

对于多年后偶然发现这个问题的其他人。 <w:instrText>对应的OpenXml class为DocumentFormat.OpenXml.Wordprocessing.FieldCode.

所以要回答原来的问题,行:

//todo instrTxt bookmark ref

应替换为:

new DocumentFormat.OpenXml.Wordprocessing.Run(new FieldCode(" REF TableRef \h ") { Space = SpaceProcessingModeValues.Preserve }),

其中 TableRef 是书签名称。