2016-01-12 38 views
0

的書籤我打開文檔模板(DOTX),然後追加另一個文檔。兩者都有書籤。使用下面的代碼片段找不到來自OpenXML附加文檔

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打開文檔時,所有書籤都在那裏。我也可以重新打開我保存的文件,然後使用上面的For Each循環找到所有的書籤。問題是,如何在不保存並重新加載文檔的情況下追加所有書籤?

回答

1

當您使用AltChunk嵌入文檔時,整個文件將嵌入到文檔中 - 它不會被集成。只有在Word打開組合文檔時纔會發生這種情況。如果你需要通過你需要的所有書籤工作要麼

  1. 打開每個文件,做書籤,然後使用AltChunk或
  2. 不使用AltChunk到文檔合併將二者結合起來,並傳送第二逐個文件地記錄到第一個文件中。
+0

謝謝。我做了第一個選擇。打開每個文檔,在書籤上插入文本並將它們保存爲臨時文件。最後,我將所有修改過的文檔合併爲一個。這比在內存中做所有的事情要慢一些,但對我來說它的速度足夠快。 – nivs1978

+0

嗯。我的意思是你可以使用Open XML來做到這一點。沒有理由不能使用Open XML SDK打開多個文檔,替換書籤,然後使用AltChunk將其合併。 –

相關問題