使用以下代码片段打开文档模板(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循环找到所有书签。问题是,如何在不保存和重新加载文档的情况下附加所有书签?
答案 0 :(得分:1)
当您使用AltChunk嵌入文档时,整个文件都嵌入到文档中 - 它未集成。只有在Word打开组合文档时才会发生这种情况。如果您需要处理所需的所有书签