使用OpenXML c#

时间:2016-07-07 08:50:49

标签: c# .net openxml openxml-sdk word-addins

我需要使用OpenXML将注释添加到word文档中。我需要为一个位置或单词(或多个单词)添加注释。通常在word文档中,openxml将这些文本作为运行元素返回。但是我想添加评论的词语带有不同的运行元素。所以我无法在我真正想要的文档单词中添加注释。这意味着我无法添加特定的CommentRangeStartCommentRangeEnd个对象。

我目前的实施情况如下。

foreach (var paragraph in document.MainDocumentPart.Document.Descendants<DocumentFormat.OpenXml.Wordprocessing.Paragraph>())
{
    foreach (var run in paragraph.Elements<Run>())
    {
        var item = run.Elements<Text>().FirstOrDefault(b => b.Text.Trim() == "My words selection to add comment");
        if (item != null)
        {
            run.InsertBefore(new CommentRangeStart() { Id = id }, item);
            var cmtEnd = run.InsertAfter(new CommentRangeEnd() { Id = id }, item);
            run.InsertAfter(new Run(new CommentReference() { Id = id }), cmtEnd);
        }
    }
}

更多细节..

<w:r><w:t>This </w:t></w:r>

<w:r><w:t>is </w:t></w:r>

<w:r><w:t>a first paragraph</w:t></w:r>

那么我怎么能在文本中添加注释&#34;是第一个&#34;在那种情况下。

或者在某些情况下,openxml文档包含run元素,如下所示。

<w:r><w:t>This is a first paragraph</w:t></w:r>

所以这两种情况都是如何在我特定的单词选择中添加注释。我在这里添加了截图,这正是我想要的。

screenshot here..

1 个答案:

答案 0 :(得分:0)

如果样式没有差异,并且允许您操作文档,则可以轻松地合并段落中的所有运行,然后隔离文本运行。