将Word文档添加到Word App而不保存到文件系统

时间:2012-07-11 15:55:17

标签: vb.net ms-word

我正在尝试在VB.NET中动态创建word文档,我发现所有这些文档似乎都非常缺乏。现在我的程序通过循环遍历数据库表来工作,并且对于每一行,它都会拉出变量。然后程序循环并解析模板word doc,用数据库中的变量替换该模板中的变量,然后保存为新的doc。

相反,对于我将要创建的每个“新文档”,我只想将它附加到另一个文档上,当需要在表中解析1000行时,我不必创建和保存1000个不同的word文档到文件系统。

我似乎无法找到任何有关此事的内容。一切都提到合并文档(我实际上想要追加,而不是合并)或我可以追加(“插入”)文档的唯一方法是使用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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

花了一段时间,但不知怎的,我发现了MailMerge,我根本不知道存在。长话短说,我可以有一个带变量的模板文档,我可以有一个输入excel文档。 excel文档将包含一个包含变量名称的标题行,excel doc的每个单独单元格将代表将进入文档的变量。当我执行MailMerge时,模板将替换为n个页面(其中n是excel行的数量)。这解决了我在一个大的Excel文档中添加多个文档的问题。我在excel doc中测试了1000行,并且它完美无缺。

这是我最终得到的代码:

        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,但功能完全存在。