8

openxml を使用して、word doc のブックマークの後にテキストを挿入する方法を探しています。これまでのところ、次を使用してブックマークを見つけることができました。

var bookmarks = mainPart.Document.Descendants<BookmarkStart>().ToList();
var bookMarkToWriteAfter = bookmarks.FirstOrDefault(bm => bm.Name == insertAfterBoomark.Name);

Word doc 内のこのブックマークは、doc 内の 2 行の選択です。2 行の選択の直後にテキストを挿入する必要があります。以下を使用してテキストを挿入しようとしました。

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

mainPart.Document.Save();

ただし、これでは目的の結果が得られません。openxmlを使用してワードドキュメントのブックマークの直後にテキストを挿入する正しい方法を知っている人はいますか?

4

2 に答える 2

9

を使用して

bookMarkToWriteAfter.Parent.InsertAfterSelf(run);

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();
于 2012-03-19T17:02:22.487 に答える