C# 如何';标签';Word文档的区域,以便于使用Open Office XML向文档中添加文本?
我的应用程序需要为用户创建一个格式丰富的Word文档。该过程从两个文档开始:C# 如何';标签';Word文档的区域,以便于使用Open Office XML向文档中添加文本?,c#,ms-word,openxml,C#,Ms Word,Openxml,我的应用程序需要为用户创建一个格式丰富的Word文档。该过程从两个文档开始: Word文档模板 作为段落“数据库”的Word文档,可根据用户输入添加到模板文档中 根据用户输入,选定的段落将复制到Word模板中,从而创建最终的Word文档 我认为需要: 创建带有“标记”区域的单词模板。比方说,模板中的某种标记用作用户选择的第一段的目标 用于在Word模板中查找“标记”并替换为“数据库”Word文档中的格式化文本的代码 有谁能建议如何“标记”Word模板的区域,然后通过编程轻松找到这些区域吗 谢谢,
Matt一种方法是在Word模板中使用合并字段。它们很容易添加,并允许您通过OpenXMLSDK以编程方式操作它们
为此,您可以使用内容控件。内容控件有一个标记属性,您可以将该属性设置为唯一的,然后可以使用该标记值以编程方式访问该属性。是可以让您开始的链接。标记文档区域 “标记”文档区域的最简单方法是使用内容控件 如果使用块级“富文本”内容控件,则它可以包含块级内容,如段落和表格,以及嵌套的内容控件 下面是一个富文本内容控件的简单示例(设置了一些有用的属性)
一个普通的顶级p
这是富文本内容控件中的段落。
另一段
因为内容控件的内容在其sdtContent元素中,所以从XML的角度来看,这些内容很容易操作。(例如,比较具有书签开始和结束点标记的书签,它们可能具有不同的父元素!)
一旦您确定内容控制是您的需求解决方案#1,您就可以根据您的需求作出选择#2
用格式化文本替换内容控件内容
<myxml>
<someelement>blagh</someelement>
<yourdb>
<content1>
<?xml version="1.0" standalone="yes"?>
<?mso-application progid="Word.Document"?>
<pkg:package xmlns:pkg="http://schemas.microsoft.com/office/2006/xmlPackage"><pkg:part pkg:name="/_rels/.rels" pkg:contentType="application/vnd.openxmlformats-package.relationships+xml" pkg:padding="512"><pkg:xmlData>...</pkg:xmlData></pkg:part></pkg:package>
</content1>
</yourdb>
</myxml>
插入任意内容有点复杂,因为您必须处理与其他部分的关系。我建议您使用代码合并docx文件:请参阅(文档生成器方法比altChunk更健壮,因为altChunk要求在altChunk感知处理器(例如Word或Plutext)中打开文档,以将altChunk转换为普通docx内容)
或者,如果您可以假设docx将在Word 2013中打开,则可以使用w15 richtext数据绑定。您将格式化的内容放入自定义XML部分(作为平面OPC XML),Word将自动使用该内容更新文档
开始时,请考虑下面的示例XML:
示例XML<myxml>
<someelement>blagh</someelement>
<yourdb>
<content1>FLAT-OPC</content1>
</yourdb>
</myxml>
废话
平面OPC
上传到,它会给你一个docx,包含一个带有w15:dataBinding的内容控件
结果内容控制
<w:sdt>
<w:sdtPr>
<w15:dataBinding w:prefixMappings="" w:xpath="/myxml[1]/yourdb[1]/content1[1]" w:storeItemID="{115f7b60-1982-4ec7-afc5-28d28886db4b}"/>
<w:richText/>
</w:sdtPr>
<w:sdtContent>
<w:p>
<w:r>
<w:t>Rich Word content can go here</w:t>
</w:r>
</w:p>
</w:sdtContent>
</w:sdt>
丰富的文字内容可以放在这里
在Word 2013中编辑此内容后,请检查自定义XML部分:
自定义XML部件内容
<myxml>
<someelement>blagh</someelement>
<yourdb>
<content1>
<?xml version="1.0" standalone="yes"?>
<?mso-application progid="Word.Document"?>
<pkg:package xmlns:pkg="http://schemas.microsoft.com/office/2006/xmlPackage"><pkg:part pkg:name="/_rels/.rels" pkg:contentType="application/vnd.openxmlformats-package.relationships+xml" pkg:padding="512"><pkg:xmlData>...</pkg:xmlData></pkg:part></pkg:package>
</content1>
</yourdb>
</myxml>
废话
?xml version=“1.0”standalone=“是”?
?mso应用程序progid=“Word.Document”?
包装:包装xmlns:pkg=”http://schemas.microsoft.com/office/2006/xmlPackage“pkg:part pkg:name=“/_rels/.rels”pkg:contentType=“application/vnd.openxmlformats package.relations+xml”pkg:padding=“512”pkg:xmlData…/pkg:xmlData/pkg:part/pkg:package
您可以看到元素现在包含XML
其美妙之处在于:
使用富文本内容控件,毫无疑问,通常使用合并字段将短语插入段落,而不是插入一个或多个块级项目(例如段落、表格)。此外,自2007年以来,数据绑定文本内容控件是达到相同目的的更现代的方式。@JasonPlutext我同意您的方式更好。我将保留合并字段注释,以防它对其他人有所帮助。