从Word复制粘贴表格到Excel

4

我有一个定期更新的Word文档。我可以进入该Word文档,选择整个表格的内容并复制,然后进入Excel电子表格并粘贴。但是它会出现问题;不过,我可以按照以下方式进行修复:

    sht.Cells.UnMerge
    sht.Cells.ColumnWidth = 14
    sht.Cells.RowHeight = 14
    sht.Cells.Font.Size = 10

无论表格是否有合并字段,此手动复制粘贴方法均有效。然后我可以开始手动操作:解析、检查、计算等。

我可以一次处理一个表格,但这很繁琐,当然也容易出错。

我想要自动化。我找到了一些代码:

Sub read_word_document()

Dim sht As Worksheet

Dim WordDoc As Word.Document
Dim WordApp As Word.Application

Set WordApp = CreateObject("Word.Application")
WordApp.Visible = False

On Error GoTo ErrHandler

Set WordDoc = WordApp.Documents.Open("Z:\mydir\myfile1.DOC", ReadOnly:=True)


j = 0
For i = 1 To WordDoc.Tables.Count
    DoEvents
    Dim s As String
    s = WordDoc.Tables(i).Cell(1, 1).Range.Text
        Debug.Print i, s
        WordDoc.Tables(i).
        Set sht = Sheets("temp")
        'sht.Cells.Clear
        sht.Cells(1, 1).Select
        sht.PasteSpecial (xlPasteAll)

    End If
Next i

WordDoc.Close
WordApp.Quit

GoTo done

ErrClose:
  On Error Resume Next

ErrHandler:

Debug.Print Err.Description

On Error GoTo 0

done:

End Sub

当然,这只会一遍又一遍地覆盖同一个工作表——这没关系。这只是一个测试。问题在于,如果表格中存在合并单元格,则此方法将无法正常工作。我无法控制所得到的文件。它包含了近百个表格。是否有一种方法可以按照我手动执行操作时完全相同的方式进行复制粘贴呢?

1个回答

6

像这样的:

Sub read_word_document()

Const DOC_PATH As String = "Z:\mydir\myfile1.DOC"

Dim sht As Worksheet
Dim WordDoc As Word.Document
Dim WordApp As Word.Application
Dim i As Long, r As Long, c As Long
Dim rng As Range, t As Word.Table

    Set WordApp = CreateObject("Word.Application")
    WordApp.Visible = False
    Set WordDoc = WordApp.Documents.Open(DOC_PATH, ReadOnly:=True)

    Set sht = Sheets("Temp")
    Set rng = sht.Range("A1")
    sht.Activate

    For Each t In WordDoc.Tables
        t.Range.Copy
        rng.Select
        rng.Parent.PasteSpecial Format:="Text", Link:=False, _
                    DisplayAsIcon:=False
        With rng.Resize(t.Rows.Count, t.Columns.Count)
            .Cells.UnMerge
            .Cells.ColumnWidth = 14
            .Cells.RowHeight = 14
            .Cells.Font.Size = 10
        End With

        Set rng = rng.Offset(t.Rows.Count + 2, 0)
    Next t
    WordDoc.Close
    WordApp.Quit
End Sub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接