在openxml中的书签后插入文本

Joh*_*aum 7 c# ms-word word-automation openxml

我正在寻找一种方法,使用openxml在word doc中的书签后插入一些文本.到目前为止,我已经能够使用以下内容找到书签:

var bookmarks = mainPart.Document.Descendants<BookmarkStart>().ToList();
var bookMarkToWriteAfter = bookmarks.FirstOrDefault(bm => bm.Name == insertAfterBoomark.Name);
Run Code Online (Sandbox Code Playgroud)

单词doc中的这个书签是doc中两行的选择.我必须在两行选择后立即插入一些文本.我试图使用以下内容插入文本:

var run = new Run();
run.Append(new Text("Hello World"));
bookMarkToWriteAfter .Parent.InsertAfterSelf(run);

mainPart.Document.Save();
Run Code Online (Sandbox Code Playgroud)

然而,这不会产生期望的结果.有没有人知道使用openxml在word文档中的书签后插入文本的正确方法?

Flo*_*ing 8

运用

bookMarkToWriteAfter.Parent.InsertAfterSelf(run);
Run Code Online (Sandbox Code Playgroud)

您正在尝试直接使用XML,这对于OpenXML并不总是可取的.

试试这个..

    Body body = mainPart.Document.GetFirstChild<Body>();
    var paras = body.Elements<Paragraph>();

    //Iterate through the paragraphs to find the bookmarks inside
    foreach (var para in paras)
    {
        var bookMarkStarts = para.Elements<BookmarkStart>();
        var bookMarkEnds = para.Elements<BookmarkEnd>();


        foreach (BookmarkStart bookMarkStart in bookMarkStarts)
        {
            if (bookMarkStart.Name == bookmarkName)
            {
                //Get the id of the bookmark start to find the bookmark end
                var id = bookMarkStart.Id.Value;
                var bookmarkEnd = bookMarkEnds.Where(i => i.Id.Value == id).First();

                var runElement = new Run(new Text("Hello World!!!"));

                para.InsertAfter(runElement, bookmarkEnd);

            }
        }
   }
   mainPart.Document.Save();
Run Code Online (Sandbox Code Playgroud)