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

时间:2016-01-12 10:00:23

标签: vb.net openxml openxml-sdk bookmarks

使用以下代码片段打开文档模板(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的书签。 如果我将文档保存到文件,当我使用Word打开它时,所有书签都在那里。我也可以重新打开保存的文件i C#,然后使用上面的For Each循环找到所有书签。问题是,如何在不保存和重新加载文档的情况下附加所有书签?

1 个答案:

答案 0 :(得分:1)

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

  1. 打开每个文档,执行书签,然后使用AltChunk OR
  2. 将两者合并
  3. 不使用AltChunk组合文档,并将第二个文档逐个部分地传输到第一个文档中。