2013-04-16 110 views
0

我在C#中使用OpemXML來構建我的DOCX文件。我的代碼看起來是這樣的:「不支持的FileMode值」C#使用OpenXML附加到DOCX文件

using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(wordFileNamePath, true)) 
{ 
    for (int i = 0; i < length; i++) 
    { 
     using (StreamWriter sw = new StreamWriter(i == 0 ? wordDoc.MainDocumentPart.GetStream(FileMode.Create) : wordDoc.MainDocumentPart.GetStream(FileMode.Append, FileAccess.Write))) 
     { 
      sw.Write(tempDocText.ToString()); 
     } 
     if (i < length - 1) 
     { 
      tempDocText = CreateNewStringBuilder(); 
      InsertPageBreak(wordDoc); 
     } 
    } 
    wordDoc.MainDocumentPart.Document.Save(); 
} 

在第二循環中,當涉及到wordDoc.MainDocumentPart.GetStream(FileMode.Append, FileAccess.Write)我得到一個ArgumentException說

回答

0

我認爲這是在你的代碼中的問題,您正在使用tempDocText.ToString()如下圖所示

using (StreamWriter sw = new StreamWriter(i == 0 ? wordDoc.MainDocumentPart.GetStream(FileMode.Create) : wordDoc.MainDocumentPart.GetStream(FileMode.Append, FileAccess.Write))) 
{ 
    sw.Write(tempDocText.ToString()); //<-Used before Initialization 
} 

在for循環初始化並初始化其作爲以後的代碼塊之前

if (i < length - 1) 
{ 
    tempDocText = CreateNewStringBuilder(); //<-Initializing it here. 
    InsertPageBreak(wordDoc); 
} 

除非你提供更多的信息有關tempDocText,其難治幫助。

反正,如果你只是想添加文本到docx文件,那麼下面的代碼可能會有所幫助。我發現它here

public static void OpenAndAddTextToWordDocument(string filepath, string txt) 
{ 
    // Open a WordprocessingDocument for editing using the filepath. 
    WordprocessingDocument wordprocessingDocument = 
     WordprocessingDocument.Open(filepath, true); 

    // Assign a reference to the existing document body. 
    Body body = wordprocessingDocument.MainDocumentPart.Document.Body; 

    // Add new text. 
    Paragraph para = body.AppendChild(new Paragraph()); 
    Run run = para.AppendChild(new Run()); 
    run.AppendChild(new Text(txt)); 

    // Close the handle explicitly. 
    wordprocessingDocument.Close(); 
} 
+0

該代碼比我發佈的代碼大,但完整的代碼沒有任何區別。正如你所說的,應該在循環之前初始化tempDocText。而'長度'也應該初始化。 我的目標不是追加一個簡單的文本,我需要附加一個XML(經過一些修改)。這個xml取自另一個DOCX文件 – yazanpro

+0

然後,也許這個[回答](http://stackoverflow.com/a/8818812/1012641)將幫助你 –

+0

我現在就給它一個 – yazanpro