it-swarm.com.de

Füllen von Feldern in Word mit C # und Microsoft Word Interop

Ich habe versucht, Formularfelder in Microsoft Word mit C # Interop-Assemblys mit dem folgenden Code auszufüllen

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 kann die Datei Ausgefuellt.docx nicht öffnen und zeigt eine Meldung an, dass ein unbekannter Fehler aufgetreten ist.

Ich habe ein einfaches Word-Dokument mit etwas unformatiertem Text und 2 Text-Formular-Feldern erstellt

kann mir jemand sagen, was schief gelaufen ist oder ob ia ein Fehler in meinem Quellcode vorliegt

Bearbeiten: Ich habe es geschafft, das Problem anzugeben. Ich habe ein Dokument erstellt, das nur ein Textformularfeld enthält. In Word 2013 ist dies unter dem Thema "Formulare aus Vorversionen" zu finden. Wenn ich den gesamten foreach-Block auskommentiere, sodass ich nur das Dokument öffne und speichere, erhalte ich dasselbe Ergebnis.

Wenn ich die Quelldatei direkt in Word öffne, ist das kein Problem. Ich habe auch versucht, das Dokument zu laden und Word sichtbar zu machen. Das Ergebnis sah aus wie eine leere Word-Instanz ohne geladenes Dokument.

12
sebastianmehler

Du solltest benutzen:

doc = Word.Documents.Add(filename);

Anstatt:

doc = Word.Documents.Open(filename);

Word verwendet die Vorlage also zum Erstellen einer Dokumentdatei, ohne die Vorlage selbst zu öffnen. Es scheint, dass sich Word anders verhält, wenn das aktive Dokument eine Vorlage ist.

13
Nir Kornfeld

Verwenden Sie das, es sollte funktionieren:

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();
1