2013-04-17 51 views
0

我試圖複製的docx文件的內容,並在C#C#重複DOCX文件中使用OpemXML

這裏使用的OpenXML在同一文件中保存的是代碼:

using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(wordFileNamePath, true)) 
{ 
    foreach(OpenXmlElement element in wordDoc.MainDocumentPart.Document.ChildElements) 
    { 
     OpenXmlElement cloneElement = (OpenXmlElement)element.Clone(); 
     wordDoc.MainDocumentPart.Document.Append(cloneElement); 
    } 
    wordDoc.MainDocumentPart.Document.Save(); 
} 

的代碼工作罰款,做我所需要的。我的問題是生成的docx文件部分損壞。當我打開我的文件時,我收到以下兩條消息: enter image description here

單擊'確定',然後'是'將正常打開文件。然而,該文件不斷被損壞,直到我'保存爲'它(具有相同或不同的名稱)。這就是新的保存文件如何修復。

通過使用用於Microsoft Office的Open XML SDK 2.5生產力工具,我可以驗證該文件並查看反射的代碼。驗證該文件將提供以下5個錯誤:

enter image description here

所以我認爲,「克隆」功能,我在我的代碼拷貝使用該元素,因爲它是如此,當它被附加到文件中,一些標識發生重複。

任何想法得到一個正確的工作DOCX文件後複製自己?任何替代代碼表示讚賞。

回答

-1

爲什麼不會損壞?您正在打開文檔,獲取所有子元素,並將它們寫入同一文檔。我不確定那應該做什麼。

+0

是的,假設你有一個圖像,文本和任何元素。我期待他們重複(附加)到文檔中。 – yazanpro

+0

@ yazanpro,那麼你應該只採取身體的元素。就像:'wordDoc.MainDocumentPart.Document.Body.ChildElements'。使用(WordprocessingDocument wordDoc = WordprocessingDocument.Open(wordFileNamePath,真)){ 的foreach (OpenXmlElement元素wordDoc :' – jn1kk

+0

你的意思是,把它們添加到身體'wordDoc.MainDocumentPart.Document.Body.Append(cloneElement)。 MainDocumentPart.Document.Body.ChildElements) OpenXmlElement cloneElement =(OpenXmlElement)element.Clone(); wordDoc.MainDocumentPart.Document.Body.Append(cloneElement); } wordDoc.MainDocumentPart.Document.Save(); } } 我得到了同樣的問題 – yazanpro