我在使用VB.Net编写的Windows窗体应用程序时遇到问题(我没有编写它,试图对其进行故障排除)。应用程序的一部分使用Word Interop程序集在Word文档和包含数据的文本文件之间进行邮件合并。
几天前,微软推出了Word(KB2883013)的更新,导致邮件合并停止工作。 Word文档只打印出没有数据。我很难过我能做些什么来解决这个问题。
我尝试以管理员身份运行应用程序,我尝试将Interop dll直接复制到项目文件夹,但两者都没有区别(不是我真的认为它会,但我真的不知道还有什么可以尝试) 。唯一有效的方法是实际卸载更新,但下周将进行下一轮自动更新。邮件合并的代码如下,任何建议都将非常感谢,我甚至不知道从哪里开始解决这个问题。 Word文档和数据文件都位于AppData文件夹中。
wordApp.Documents.Open(FileName:=returnAppPath() & "mergedoc.doc")
wordApp.ActiveDocument.MailMerge.OpenDataSource(Name:= _
returnAppPath() & "inputdata.txt", _
ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
Format:=Word.WdOpenFormat.wdOpenFormatAuto, Connection:="", SQLStatement:="", SQLStatement1 _
:="", SubType:=Word.WdMergeSubType.wdMergeSubTypeOther)
With wordApp.ActiveDocument.MailMerge
.Destination = Word.WdMailMergeDestination.wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = Word.WdMailMergeDefaultRecord.wdDefaultFirstRecord
.LastRecord = Word.WdMailMergeDefaultRecord.wdDefaultLastRecord
End With
.Execute(Pause:=False)
End With
Dim intCopies As Integer = CInt(numudCopies.Value)
wordApp.Application.PrintOut(FileName:="", Range:=Word.WdPrintOutRange.wdPrintAllDocument, Item:= _
Word.WdPrintOutItem.wdPrintDocumentContent, Copies:=CObj(intCopies), Pages:="", PageType:=Word.WdPrintOutPages.wdPrintAllPages, _
ManualDuplexPrint:=False, Collate:=True, Background:=True, PrintToFile:= _
False, PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _
PrintZoomPaperHeight:=0)
wordApp.ActiveWindow.Close(False)
wordApp.ActiveDocument.Close(SaveChanges:=Word.WdSaveOptions.wdDoNotSaveChanges)
wordApp.Quit()
wordApp = Nothing
答案 0 :(得分:0)
在某些情况下,Interop不是一个好主意(参见Microsoft的KB 257757)。
您的方案中的一个选项是重新创建模板并使用某些OpenXML工具包以编程方式进行邮件合并。通过这种方式,您将获得以下好处:
在.NET应用程序中,您必须将数据读入.NET对象(数据模型类的集合),然后将它们发送到文档生成方法,该方法准备最终文档,其中模板和数据合并在一起。我选择的工具是Docentric,自从我开始使用它以来,我没有必要为复杂的文档操作做更简单的Word邮件合并或VBA文档脚本。您可以仔细查看实际示例here。