web-dev-qa-db-ja.com

c#とMicrosoftWordの相互運用機能を使用してWordのフィールドに入力する

次のコードでC#相互運用機能アセンブリを使用してMicrosoftWordのフォームフィールドに入力しようとしました

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はファイルAusgefuellt.docxを開くことができず、不明なエラーが発生したことを示すメッセージを表示します。

少しのフォーマットされていないテキストと2つのText-Form-Fieldsを使用して単純なWordドキュメントを作成しました

誰かが私に、何がうまくいかなかったのか、またはiaのソースコードにエラーがあるのか​​教えてもらえますか?

編集:私はなんとか問題を特定することができました。 1つのテキストフォームフィールドのみを含むドキュメントを作成しました。 Word 2013では、これはトピック「Formulare aus Vorversionen」の下にあります(これを「以前のバージョンのフォームフィールド」に翻訳します)ドキュメントを開いて保存するだけになるようにforeachブロック全体をコメントアウトすると、同じようになります結果。

ソースファイルをWordで直接開いても問題ありません。また、ドキュメントを読み込んでWordを表示しようとしました。結果は、ドキュメントがロードされていない空のWordインスタンスのように見えました。

12
sebastianmehler

次を使用する必要があります。

doc = Word.Documents.Add(filename);

の代わりに:

doc = Word.Documents.Open(filename);

そのため、Wordはテンプレートを使用してドキュメントファイルを作成し、テンプレート自体は開きません。アクティブなドキュメントがテンプレートの場合、Wordの動作が異なるようです。

13
Nir Kornfeld

それを使用してください、それはうまくいくはずです:

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