0

VB.NET でその場で Word 文書を作成しようとしていますが、これらすべてに関する文書が非常に少ないように思われます。現在、私のプログラムはデータベース テーブルをループすることで機能し、行ごとに変数を引き出します。次に、プログラムはループしてテンプレート単語 doc を解析し、そのテンプレートの変数をデータベースの変数に置き換えてから、新しい doc として保存します。

代わりに、作成するすべての「新しいドキュメント」について、それを別のドキュメントに追加したいので、テーブル内の 1000 行を解析するときに、1000 の異なる単語を作成して保存する必要はありません。ドキュメントをファイルシステムに。

私はこれについてそこに何かを見つけることができないようです. すべてがドキュメントのマージ(実際にはマージではなく追加したい)について言及しているか、ドキュメントを追加(「挿入」)できる唯一の方法はWordApplication.Selection.InsertFile(newWordDocument.FullName). newWordDocumentこれは機能しますが、挿入する前にファイルシステムに保存する必要があります。

まだメモリ内にある間newWordDocumentに、WordApplicationオブジェクトに追加する方法はありますか?

ここに私が今持っているものの疑似コードがあります

For each row in TableOfVariables
Dim WordApplication as New Word.Application
Dim tempDoc as New Word.Document
tempDoc = WordApplication.Documents.Add
tempDoc = fillVariablesOfTheDocument(tempDoc, row)
tempDoc.Save() 'This is the problem - it saves as a new file rather than appending into WordApplication
Next
4

2 に答える 2

0

あなたは課題を作ったのではなく、

objWordApp.Documents.Add(tempDoc) 'ここが問題です!

 Dim wordApp as new Microsoft.Office.Interop.Word.Application
 wordApp.Visible = true
 Dim doc as Word.Document
 doc = wordApp.Documents.Add

準備が整うまで保存する必要はありません。これも機能します

 Dim Word As Word.Application
 Dim Doc As Word.Document
 'Start Word and open the document template.
 Word = CreateObject("Word.Application")
 Word.Visible = True
 Doc = Word.Documents.Add

http://support.microsoft.com/kb/316383から

于 2012-07-11T16:19:58.557 に答える
0

しばらく時間がかかりましたが、どういうわけかMailMerge、私が存在することを知らなかった について知りました。簡単に言うと、変数を含むテンプレート ドキュメントと入力 Excel ドキュメントを使用できます。Excel ドキュメントには、変数名を含むヘッダー行があり、Excel ドキュメントの個々のセルは、ドキュメントに入る変数を表します。を実行すると、テンプレートはページ数 (は Excel の行数)MailMergeに置き換えられます。これにより、複数のドキュメントを 1 つの大きな Excel ドキュメントに追加するという問題が解決されます。これを Excel ドキュメントの 1,000 行でテストしたところ、問題なく動作しました。 nn

これが私が最終的に得たコードです:

        Dim wrdSelection As Word.Selection
        Dim wrdMailMerge As Word.MailMerge
        Dim wrdMergeFields As Word.MailMergeFields

        ' Create an instance of Word  and make it visible.
        wrdAppMailMrg = CreateObject("Word.Application")
        wrdAppMailMrg.Visible = True

        ' Add a new document.
        wrdDocMailMrg = wrdAppMailMrg.Documents.Open("Template.docx")
        wrdDocMailMrg.Select()

        wrdSelection = wrdAppMailMrg.Selection()
        wrdMailMerge = wrdDocMailMrg.MailMerge()

        'Open Data Source
        wrdDocMailMrg.MailMerge.OpenDataSource("InputVariables.xlsx", SQLStatement:="SELECT * FROM [Sheet1$]")

        ' Perform mail merge.
        wrdMailMerge.Destination = _
                   Word.WdMailMergeDestination.wdSendToNewDocument
        wrdMailMerge.Execute(False)

        ' Close the original form document.
        wrdDocMailMrg.Saved = True
        wrdDocMailMrg.Close(False)

        ' Release References.
        wrdSelection = Nothing
        wrdMailMerge = Nothing
        wrdMergeFields = Nothing
        wrdDocMailMrg = Nothing
        wrdAppMailMrg = Nothing

今は微調整して実行速度を上げ、UI をクリーンアップする必要がありますが、機能は完全にそこにあります。

于 2012-07-24T16:27:39.793 に答える