2013-08-30 57 views
12

我試圖用C#互操作程序集用下面的代碼來填寫表單域在Microsoft Word灌裝領域使用C#和Microsoft Word互操作

string filename = @"N:\mehler\Vorlage2.dotx"; 

Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application(); 
Microsoft.Office.Interop.Word.Document doc = new Microsoft.Office.Interop.Word.Document(); 

doc = word.Documents.Open(filename); 
doc.Activate(); 

foreach (Microsoft.Office.Interop.Word.FormField field in doc.FormFields) 
{ 
    switch (field.Name) 
    { 
     case "Text2": 
      field.Range.Text = "1"; 
      break; 

     default: 
      break; 
    } 
} 

doc.SaveAs2(@"N:\mehler\Ausgefuellt.docx"); 
doc.Close(); 
word.Quit(); 
System.Diagnostics.Process.Start(@"N:\mehler\Ausgefuellt.docx"); 

微軟Word無法打開文件Ausgefuellt.docx和節目一條消息表示發生了未知的錯誤。

我創建了一個簡單的Word文檔有位未格式化的文本和2的文本形式,場

誰能告訴我,哪裏出了問題,或者如果IA有一個錯誤在我的源代碼

編輯: 我設法指定了問題。我創建了一個只包含一個文本表單字段的文檔。 在Word 2013中,發現這個主題「Formulare aus Vorversionen」(我將它翻譯爲「Formfields from former Versions」) 如果我將整個foreach塊註釋掉以便我只打開並保存文檔,相同的結果。

如果我直接在Word中打開源文件,它是沒有問題的。我也嘗試加載文檔並讓Word可見。結果看起來像一個沒有加載Document的空Word實例。

+0

執行處斷裂'開放method'? –

+0

我也發現這個主題http://stackoverflow.com/q/17383430/1307426它可能是一個Word Interop問題? – sebastianmehler

+0

你爲什麼試圖更新模板?也許你應該發出一個'Word.Documents.Add(文件名);'所以Word會根據你的模板創建一個** new **文檔... –

回答

12

你應該使用:

doc = Word.Documents.Add(filename); 

相反的:

doc = Word.Documents.Open(filename); 

使Word將使用模板來創建一個文檔文件,而不是打開模板本身。 當活動文檔是模板時,Word的行爲似乎不同。

+0

這實際上是解決方案。謝謝你的提示! – sebastianmehler

1

使用,它應該工作:

Word.Application WordApp; 
Word.Document WordDoc; 

object misValue = System.Reflection.Missing.Value; 

WordApp = new Word.ApplicationClass(); 
WordDoc = WordApp.Documents.Open(filePath2, misValue, misValue, misValue, misValue, misValue, 
     misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue); 
WordDoc.Activate();