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:
- 下载并安装最新版本的 Open XML SDK (OpenXMLSDKToolV25.msi)
- 打开位于
C:\Program Files (x86)\Open XML SDK\V2.5\tool
的 Open XML SDK 生产力工具 (OpenXmlSdkTool.exe
)(当安装到默认位置时)。
- 使用所需 formatting/content 创建示例文档并在工具中打开示例文档。
- 点击反映代码
- 将生成的代码复制到您的项目中并根据需要进行调整,例如用您的内容替换静态文本。
对于多年后偶然发现这个问题的其他人。 <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
是书签名称。
我正在尝试为 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:
- 下载并安装最新版本的 Open XML SDK (OpenXMLSDKToolV25.msi)
- 打开位于
C:\Program Files (x86)\Open XML SDK\V2.5\tool
的 Open XML SDK 生产力工具 (OpenXmlSdkTool.exe
)(当安装到默认位置时)。 - 使用所需 formatting/content 创建示例文档并在工具中打开示例文档。
- 点击反映代码
- 将生成的代码复制到您的项目中并根据需要进行调整,例如用您的内容替换静态文本。
对于多年后偶然发现这个问题的其他人。 <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
是书签名称。