如何在Word文档中替换书签处的文本

4

我正在尝试以编程方式替换Word文档中书签处的文本。我可以找到书签处的文本(我正在使用一个只有一个书签的测试文档),并将其打印出来进行调试,但似乎无法设置文本的值。如何替换书签处的文本?

WordprocessingDocument wordprocessingDocument=WordprocessingDocument.Open(filepath, true);

foreach (BookmarkStart bookmark in wordprocessingDocument.MainDocumentPart.Document.Body.Descendants<BookmarkStart>())
{
    System.Diagnostics.Debug.WriteLine(bookmark.Name + " - " + bookmark.Parent.InnerText);
    /* Below line does not work */
    bookmark.Parent.InnerText = "My Replacement Text"
}
1个回答

1
获取所有书签开始。
public List<WP.BookmarkStart> GetAllBookmarks ()
{
    var bmk = _workspace.MainDocumentPart.RootElement.Descendants<WP.BookmarkStart>().ToList();
    return bmk;
}

遍历所有书签。
foreach (var bookmark in bookmarks)
{
    string modifiedString = GetModifiedString();
    ReplaceBookmarkText(bookmark, modifiedString);
}

替换书签文本
public void ReplaceBookmarkText(WP.BookmarkStart bookmark, string newText)
{
    try
    {
        var bmkText = bookmark.NextSibling<WP.Run>();
        if (bmkText != null)
        {
            bmkText.GetFirstChild<WP.Text>().Text = newText;
            wordprocessingDocument.MainDocumentPart.Document.Save();
        }
    }
    catch(Exception ex)
    {
        Debug.WriteLine(ex.Message);
        throw;
    }            
}

其中WP是什么

using WP = DocumentFormat.OpenXml.Wordprocessing;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接