0

我正在尝试在 VB.NET 中动态创建 Word 文档,但我发现所有这些文档似乎都非常稀缺。现在我的程序通过循环遍历数据库表来工作,并且对于每一行它都提取变量。然后程序循环并解析一个模板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 文档的每个单独的单元格将代表将进入文档的变量。当我执行MailMerge时,模板将替换n为页数(其中n是 excel 行数)。这解决了我将多个文档添加到 1 个大 excel 文档的问题。我在我的 excel 文档中用 1,000 行对此进行了测试,它完美无缺。

这是我最终得到的代码:

        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 回答