在Docx文件中插入注释*在运行中的文本周围

时间:2008-12-23 21:36:02

标签: c# openxml docx wordml

如何在文本运行中搜索特定文本(使用OpenXML SDK 2.0在Docx中),一旦找到它,如何在“搜索文本”周围插入注释。 “搜索文本”可以是现有运行的子字符串。样本中的所有示例都在第一段中插入注释或类似的简单...不是我正在寻找的。

由于

2 个答案:

答案 0 :(得分:2)

你必须将其分解为单独的运行。尝试使用DocumentReflector - 它甚至生成C#代码 - 来查看用word创建的文档。结构应该看起来像这样(简化):

<paragraph>
  <run>...</run>
  <commentRangeStart />
  <run>search text</run>
  <commentRangeEnd />
  <run>...</run>
</paragraph>

答案 1 :(得分:0)

对于那些可能仍在寻找答案的人:

Here是代码:

private void AddComment( Paragraph paragraph, string text )
        {
            string commentId = GetNextCommentId();
            Comment comment = new Comment() { Id= commentId, Date = DateTime.Now };
            Paragraph commentPara = new Paragraph( new Run( new Text( GetCommentsString( text ) ) ) { RunProperties = new RunProperties( new RunStyle() { Val = "CommentReference" } ) } );
            commentPara.ParagraphProperties = new ParagraphProperties( new ParagraphStyleId() { Val = "CommentText" } );
            comment.AppendChild( commentPara );
            _comments.AppendChild( comment );//Comments object
            _comments.Save();

            paragraph.InsertBefore( new CommentRangeStart() { Id = commentId }, paragraph.GetFirstChild<Run>() );
            var commentEnd = paragraph.InsertAfter( new CommentRangeEnd() { Id = commentId }, paragraph.Elements<Run>().Last() );
            paragraph.InsertAfter( new Run( new CommentReference() { Id = commentId } ), commentEnd );
        }