2013-08-30 30 views
12

próbowałem wypełnić formularz pól w programie Microsoft Word przy użyciu C# Interop zgromadzeń z następującego koduwypełnienie pól w programie Word przy użyciu C# i Microsoft Word Interop

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"); 

Microsoft Word nie może otworzyć pliku Ausgefuellt.docx i pokazuje komunikat informujący, że wystąpił nieznany błąd.

stworzyłem prosty dokument programu Word z odrobiną unformated tekstu i 2 Tekst-Form-Fields

ktoś może mi powiedzieć, co się stało lub jeśli ia mają błąd w moim kodu źródłowego

Edycja : Udało mi się określić problem. Stworzyłem tylko dokument zawierający jedno pole tekstowe. W Word 2013 znajduje się w temacie "Formulare aus Vorversionen" (przetłumaczę to na "Formfields from dawnej wersji") Jeśli skomentuję cały blok foreach, tak żebym tylko otworzył i zachował Dokument, dostaję ten sam wynik.

Jeśli otworzę plik źródłowy bezpośrednio w programie Word, to nie jest problem. Próbowałem też załadować Dokument i uczynić Słowo Widocznym. Wynik wyglądał jak pusta instancja programu Word bez załadowanego dokumentu.

+0

wykonanie w 'otwartym method'? –

+0

Też znalazłem ten temat http://stackoverflow.com/q/17383430/1307426 może to być problem między słowami? – sebastianmehler

+0

Dlaczego próbujesz zaktualizować szablon? Może powinieneś wydać 'Word.Documents.Add (filename);' tak Word stworzy ** nowy ** dokument oparty na twoim szablonie ... –

Odpowiedz

12

Należy użyć:

doc = Word.Documents.Add(filename); 

Zamiast:

doc = Word.Documents.Open(filename); 

Więc Word użyć szablonu, aby utworzyć plik dokumentu, a nie otworzyć sam szablon. Wygląda na to, że Word zachowuje się inaczej, gdy aktywny dokument jest szablonem.

+0

To jest rozwiązanie, dzięki za podpowiedź! – sebastianmehler

1

Zastosowanie że to powinno działać:

przerwy
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(); 
Powiązane problemy