无法从 OpenXML 附加文档中找到书签

Cannot find bookmarks from OpenXML appended document

我使用以下代码片段打开一个文档模板 (DOTX),然后附加另一个文档。两者都有书签。

Dim m_word As WordprocessingDocument = = WordprocessingDocument.Open("FrontPage.dotx", True)
Dim altChunkId As String = "ChunkId1"
Dim mainPart As MainDocumentPart = m_word.MainDocumentPart
Dim chunk As AlternativeFormatImportPart = mainPart.AddAlternativeFormatImportPart(
    DocumentFormat.OpenXml.Packaging.AlternativeFormatImportPartType.WordprocessingML, altChunkId)
Using fileStream As IO.FileStream = IO.File.Open("Appendix.dotx", IO.FileMode.Open)
  chunk.FeedData(fileStream)
End Using
Dim altChunk As AltChunk = New DocumentFormat.OpenXml.Wordprocessing.AltChunk()
altChunk.Id = altChunkId
mainPart.Document.Body.InsertAfter(altChunk, mainPart.Document.Body.Elements(Of DocumentFormat.OpenXml.Wordprocessing.Paragraph).Last())
mainPart.Document.Save()

现在,如果我尝试像这样遍历所有书签:

Dim docbody As Body = doc.GetFirstChild(Of Body)()
For Each bookmarkStart As BookmarkStart In docbody.Descendants(Of BookmarkStart)()
  ' Do something with the bookmarks
Next

我只得到了原来frontpage.dotx的书签,appendix.dotx的书签none被找到了。 如果我将文档保存到一个文件中,当我使用 Word 打开它时,所有的书签都在那里。我还可以在 C# 中重新打开保存的文件,然后可以使用上面的 For Each 循环找到所有书签。问题是,如何在不保存并重新加载文档的情况下获取所有追加后的书签?

当您使用 AltChunk 嵌入文档时,整个文件都嵌入到文档中 - 它不是集成的。只有在 Word 打开合并的文档时才会发生这种情况。如果您需要浏览所有书签,您需要

  1. 打开每个文档,做书签,然后使用 AltChunk 或
  2. 将两者结合起来
  3. 不使用AltChunk合并文档,将第二个文档part-by-part转入第一个文档。