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

C# 使用.Net编写和读取.docx文档中的隐藏标记,c#,.net,vb.net,docx,C#,.net,Vb.net,Docx,我想做的是能够在文档中写入一些隐藏标记,这样当用户填写一些信息时,我就可以根据文档周围的标记或部分来处理文档的每个部分。我在用.NET,有什么想法吗?谢谢,您可以按说明使用自定义文档属性,或者查看标记,然后 其实质是: 创建将作为模板的Word文档 在Word中,打开 在“开发人员”选项卡中有一个控件组。单击“Aa”标签插入新的内容标签,单击“属性”编辑标签别名和数据,打开设计模式查看内容标签 如果应用程序可以输出要绑定到文档的XML,则以下步骤适用: 打开Word内容控制工具包 打开您创

我想做的是能够在文档中写入一些隐藏标记,这样当用户填写一些信息时,我就可以根据文档周围的标记或部分来处理文档的每个部分。我在用.NET,有什么想法吗?谢谢,您可以按说明使用自定义文档属性,或者查看标记,然后

其实质是:

  • 创建将作为模板的Word文档
  • 在Word中,打开
  • 在“开发人员”选项卡中有一个控件组。单击“Aa”标签插入新的内容标签,单击“属性”编辑标签别名和数据,打开设计模式查看内容标签
如果应用程序可以输出要绑定到文档的XML,则以下步骤适用:

  • 打开Word内容控制工具包
  • 打开您创建的文档
  • 在右侧面板中附加xml
  • 双击内容标记以编辑其XPath绑定或使用拖放;请参阅WCCT手册
准备好模板后,根据手头的实际任务,您可以使用这些内容标签执行许多操作,包括:

  • 替换文档中的自定义xml部分,以更新用户打开文档时看到的数据
  • 使用OpenXMLSDK替换数据,而无需在Word中打开它
  • 使用模板收集数据(可能但不可靠,不推荐)
  • 通过OpenXMLSDK从代码中删除和插入内容标记
在代码中,您可以通过使用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();
var contentTags=document.MainDocumentPart.document.Body
.后代()
.Where(x=>x.SdtProperties.GetFirstChild()!=null&&x.SdtProperties.GetFirstChild()!=null)
.Select(x=>x.SdtProperties.GetFirstChild().Val.InnerText==“您要查找的任何标记或其他匹配多个标记的条件”)
.ToList();

它必须如何“隐藏”?你能使用书签吗?它需要对用户隐藏,不要编辑/删除它,这就是全部,非常感谢你的回答。我似乎很清楚,除了阅读部分。基本上,当用户输入信息时,我需要能够处理该信息,因此我需要能够获取文本以及文本所在的“ID”或标记名,这有意义吗?非常感谢again@user58760我添加了一个示例代码,向您展示如何查找内容标记,您可以在该代码的基础上设置或获取由其标记标识的内容标记内的文本。感谢Sten,我将告诉您它是如何运行的。您的解决方案运行良好,但有一个小提示,即x.SdtProperties.GetFirstChild()!=null似乎与任何结果都不匹配。如果省略了这个术语,我会得到内容部分,否则不会。我不确定您为什么要查找第一个数据绑定子项?@user58760 DataBinding已设置如果您使用文章中链接的Word内容工具,它将包含指向您在该工具中链接的XML元素的XPath