4

現在、フィールドを含む Word ドキュメント テンプレートを作成し、C# を使用して入力すると、次のようになります...

object missing = Type.Missing;
Word.Application app = new Word.Application();
Word.Document doc = app.Documents.Open("file.doc", ref missing, true);
Word.FormFields fields = doc.FormFields;
fields[2].Result = "foo"
fields[3].Result = "bar"

フィールドを参照するより良い方法はありますか?

テンプレートを作成するときに、タイトルとタグをフィールドに追加できることに気付きましたが、これらのプロパティを参照する方法が見つかりませんでした。自分がどのフィールドにいるかを数えて把握するだけでなく、フィールドに名前を付けて直接参照できると便利です。

4

3 に答える 3

5

これを行う良い方法の 1 つは、後でテキストを追加するテンプレートの各場所にブックマークを配置することです ([挿入] -> [リンク] -> [ブックマーク])。コードからそれらを使用するには、名前で各ブックマークにアクセスします。次の例を参照してください。

Word._Application wApp = new Word.Application();
Word.Documents wDocs = wApp.Documents;
Word._Document wDoc = wDocs.Open(ref "file_path_here", ReadOnly:false);
wDoc.Activate();

Word.Bookmarks wBookmarks = wDoc.Bookmarks;
Word.Bookmark wBookmark = wBookmarks["Bookmark_name"];
Word.Range wRange = wBookmark.Range;
wRange.Text = valueToSetInTemplate;
于 2014-10-16T16:19:03.453 に答える
4

古いフォームを使用していますか? 従来のフォーム フィールドを Word 文書に追加すると、[プロパティ] > [フィールド設定] の下に、基本的にフィールドの名前であるブックマークが表示されます。デフォルトでは、従来のテキスト フィールドには「Text1」、「Text2」などのブックマークがあります。

したがって、VBA では次のようになります。

ActiveDocument.FormFields("Text1").Result = "asdf"

あなたの場合は(C#):

doc.FormFields["Text1"].Result = "asdf"

または、フィールドのリストをスキャンして特定の名前を探すループを単純に作成することもできます (疑似 VB):

Function GetFieldByName(name As String) As Field
    Dim i
    For i = 0 to fields.count - 1
        If fields(i).Name = name Then Return fields(i)
    Next
    Return Nothing
End Function

タグを設定して VSTO (C#) で自動化できる新しいフォーム フィールド コントロールを使用している場合:

doc.SelectContentControlsByTag("Address")[1].Range.Text = "asdf"

コンテンツ コントロールの詳細については、こちらをご覧ください。

于 2014-10-16T16:40:34.267 に答える