使用.Net在.docx文档中编写和读取隐藏的标记

时间:2013-02-18 17:02:33

标签: c# .net vb.net docx

我想要做的是能够在文档中写一些隐藏的标记,这样当用户填写一些信息时,我就可以根据包围它的标记或部分处理文档的每个部分。我正在使用.NET,任何想法?感谢

2 个答案:

答案 0 :(得分:2)

查看SdtElements代码,OpenXml SdkWord 2007 Content Control Toolkit

本质是:

  • 创建将作为模板的Word文档
  • 在Word中,启用Developer tab
  • 在“开发人员”选项卡中有一个“控制”组。单击“Aa”按钮以插入新的内容标记,单击“属性”以编辑标记别名和数据,启用“设计模式”以查看内容标记

如果您的应用可以输出您要绑定到文档的XML,则以下步骤适用:

  • 打开Word Content Control Toolkit
  • 打开您创建的文档
  • 在右侧面板中附加xml
  • 双击内容标签以编辑其XPath绑定或使用拖放;参见WCCT手册

准备好模板后,根据您手头的实际任务,您可以使用这些内容标记做很多事情,包括:

  • 替换文档中的自定义xml部分以更新用户打开时将看到的数据
  • 使用openxml sdk替换数据而不在Word中打开它
  • 使用模板收集数据(可能但不可靠,不推荐)
  • 通过openxml sdk从代码中删除并插入内容标记

在您的代码中,您可以通过对OpenXmlSdk对象使用LINQ查询来查找内容标记,如下所示:

var contentTags = document.MainDocumentPart.Document.Body
                .Descendants<SdtElement>()
                .Where(x => x.SdtProperties.GetFirstChild<Tag>() != null && x.SdtProperties.GetFirstChild<DataBinding>() != null)
                .Select(x => x.SdtProperties.GetFirstChild<Tag>().Val.InnerText =="Whatever Tag you're looking for or other condition to match several")
                .ToList();

答案 1 :(得分:0)

您可以使用herehere

所述的自定义文档属性