繁体   English   中英

无法使用OpenXML填充Word中的内容控件

[英]Unable to fill Content Control in Word using OpenXML

我是OpenXML的新手,在这个问题上,我要扯头发。 帮助将不胜感激。

概述是我试图通过asp.net填充word文档内容模板。

我可以轻松地使用CustomXML填充字段,但是我尝试填充的文档也与SharePoint文档库映射。 因此,当我将文档上载到SharePoint库中时,它将自动填充Word文档中内容控件中的列。 现在使用自定义XML破坏了该设置。 当控件映射到SharePoint时,无法使用OpenXML填充数据。

请提供示例代码或正确方向的帮助。

这正是我们在项目中所做的:)幸运的是。

首先,您需要为该文档库创建事件接收器。 并且您需要实现ItemUpdated和ItemAdded。 参见http://www.dotnetcurry.com/ShowArticle.aspx?ID=649 http://blogs.msdn.com/b/brianwilson/archive/2007/03/05/part-1-event-handlers-everything-您需要了解有关Microsoft Office Sharepoint门户服务器Moss事件处理程序.aspx的信息

//事件接收器的代码。这将为您提供内容控件的名称及其值

 Dictionary<string, string> results = new Dictionary<string, string>();
            using (Stream stream = file.OpenBinaryStream(SPOpenBinaryOptions.SkipVirusScan)) {

                using (WordprocessingDocument doc = WordprocessingDocument.Open(stream, true)) {
                    var contentControls = doc.MainDocumentPart
                        .GetXDocument()
                        .Descendants(w + "sdt");

                    foreach ( var contentControl in contentControls ) 
                    {
                        string key = (string)contentControl.Descendants(w + "sdtPr").Elements(w + "alias").Attributes(w + "val").FirstOrDefault();
                        string val = GetTextFromContentControl(contentControl);
                        results[key] = val;
                    }

 }

static string GetTextFromContentControl(XElement contentControlNode) {
            return contentControlNode.Descendants(w + "p")
                .Select
                (
                    p => p.Elements()
                          .Where(z => z.Name == r || z.Name == ins || z.Name == br)
                          .Descendants()
                          .Where(z => z.Name == w + "t" || z.Name == w + "br")
                          .StringConcatenate(element => (string)element + (element.Name == w + "br" ? Environment.NewLine : "")) + Environment.NewLine
                ).StringConcatenate();
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM