在VB NET中合并保存格式的word文档

时间:2017-03-05 14:54:12

标签: vb.net ms-word ms-office

我正在编写一个程序,该程序应该将多个word文档合并为一个,保持每个文档的格式。经过对网络的一些研究后,我们写了一个应该有效的版本,具体如下:

Public Sub processmodulestest(ByVal id As Integer)
    Dim oMissing = System.Reflection.Missing.Value
    Dim oFalse = False
    Dim oTrue = True
    Dim fileDirectory = "C:\<file-path>\MOD-TEST\"

    Dim wrdApp As New Word.Application
    Dim destDoc As Word.Document 'destination doc
    Dim docfile As Word.Document 'tmp doc to paste
    destDoc = wrdApp.Documents.Add

    'docNew.PageSetup.TopMargin = wrdApp.InchesToPoints(1.0F)
    'docNew.PageSetup.BottomMargin = wrdApp.InchesToPoints(0.0F)
    Dim wordFiles() As String = Directory.GetFiles(fileDirectory, "*.doc")

    wrdApp.Options.Pagination = False
    wrdApp.ActiveWindow.View.ShowAll = True

    For Each el As String In wordFiles
        docfile = wrdApp.Documents.Open(el, False, False)
        wrdApp.Selection.WholeStory()
        wrdApp.Selection.Copy()
        wrdApp.ActiveWindow.Close(Word.WdSaveOptions.wdDoNotSaveChanges)
        destDoc.Activate()
        wrdApp.Selection.PasteAndFormat(Word.WdRecoveryType.wdFormatOriginalFormatting)
        wrdApp.Selection.InsertBreak(Word.WdBreakType.wdPageBreak)
    Next

    wrdApp.Visible = True
End Sub

我收到以下错误:

An unhandled exception of type'System.Runtime.InteropServices.COMException' 
HRESULT: 0x80010108 (RPC_E_DISCONNECTED)) The object invoked has disconnected from its clients.

参考以下一行:

destDoc.Activate()

我读到这应该是因为代码在已经结束的Office实例上使用了非限定方法,但我无法理解如何修复它

1 个答案:

答案 0 :(得分:1)

我不确定如何在VB.NET中执行此操作,但下面的VBA代码会将所有Word文档合并为一个统一的Word文档。

将多个Word文档附加到单个Word文档中

Sub Foo()
Dim i As Long
Dim MyName As String, MyPath As String
Application.ScreenUpdating = False
Documents.Add

MyPath = "C:\Documents and Settings\Excel\Desktop\Word Files\" ' <= change this as necessary

MyName = Dir$(MyPath & "*.doc") ' not *.* if you just want doc files

Do While MyName <> ""
If InStr(MyName, "~") = 0 Then
Selection.InsertFile _
FileName:="""" & MyPath & MyName & """", _
ConfirmConversions:=False, Link:=False, _
Attachment:=False
Selection.InsertBreak Type:=wdPageBreak
End If

MyName = Dir ' gets the next doc file in the directory
Loop

End Sub