2014-10-17 59 views
0

我在使用VB.Net編寫的Windows Forms應用程序時遇到了問題(我沒有編寫它,試圖排除它)。應用程序的一部分使用Word Interop程序集在Word文檔和包含數據的文本文件之間進行郵件合併。由Microsoft Update引起的Office Word Interop問題

幾天前,微軟推出了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

無論如何Interop在某些情況下不是一個好主意(請參閱Microsoft的KB 257757)。

您的方案中的一個選項是重新創建模板並使用一些OpenXML工具包以編程方式進行郵件合併。通過這種方式,您將獲得以下好處:

  • 模板可以在Word中使用準備外接數據佔位符
  • 最後文件將在DOCX,可與所有Office版本自2003年以來
  • 使用
  • 您可以合併文檔所有部分的數據(包括頁眉,頁腳,部分)
  • 基於條件標準可以顯示/省略數據。
  • 報告生成可以集中在服務器上完成,不需要安裝Word。

在.NET應用程序,你必須將數據讀入.NET對象(數據模型類的集合),然後將其發送到準備的最後文件,其中模板和數據得到合併在一起的文檔生成方法。我選擇的工具是Docentric,因爲我開始使用它,所以我不必爲複雜的文檔操作做更多簡單的Word郵件合併或VBA文檔腳本。你可以仔細看看一個實際的例子here