将Word中的页面内容粘贴到Excel单元格

时间:2018-01-25 19:50:01

标签: excel vba ms-word

我正在尝试使用VBA从Excel文档中提取Word页面的文本。

到目前为止,我可以设法使用.ActiveWindow.Panes(1).Pages选择器选择页面集合,但是当我迭代它时,我不知道如何从给定页面获取文本。循环很简单,但我怎样才能获得文本?

例如,如果我只想将第一页的文本放入单元格A1:

Dim objWord As New Word.Application
Dim objDoc As New Word.Document
Set objDoc = objWord.documents.Open("C:\wordfile.docx")

For Each currPage In objWord.ActiveWindows.Panes(1).Pages
    Range("A1") = ????
    Exit For
Next currPage

1 个答案:

答案 0 :(得分:1)

至少可以说,Word中的Pages对象令人困惑。这是一种“思考后”,实际上只反映了布局,但没有提供对内容的任何访问权限。 Word实际上没有“Page”对象,只不过它有一个“Line”对象。这样做的原因是Word不断重新计算行和分页符,所以它们不是“硬 - 快”,因此从一秒到下一秒都不可靠。

在Word中访问页面的方法是在当前选择的基础上或多或少地循环访问它们,如以下过程所示。

(这是Word VBA。我已经将你需要的内容作为注释,但当然没有声明或实例化Excel范围和objWord对象。这使得更容易理解Word中所需的内容。)

Sub GetPageContent()
    Dim nrPages As Long
    Dim pg As Long
    Dim doc As word.Document
    Dim rngStart As word.Range
    Dim rngEnd As word.Range
    Dim rngPageContent As word.Range

    'objWord.documents.Open("C:\wordfile.docx")
    Set doc = Documents.Open("C:\wordfile.docx")
    nrPages = doc.content.Information(wdNumberOfPagesInDocument)
    Set rngStart = doc.Range(0, 0)
    For pg = 2 To nrPages
        Set rngEnd = doc.GoTo(What:=wdGoToPage, Which:=wdGoToNext, Name:=CStr(pg))
        Set rngPageContent = doc.Range(rngStart.Start, rngEnd.End)
        'Range("R1C" & Cstr(pg-1)) = pg - 1 & vbCr & rngPageContent
        Debug.Print pg - 1 & vbCr & rngPageContent
        Set rngStart = rngEnd.Duplicate
    Next
    'The last page
    Set rngPageContent = doc.Range(rngStart.Start, doc.content.End)
    'Range("R1C" & Cstr(pg-1)) = pg - 1 & vbCr & rngPageContent
    Debug.Print pg - 1 & vbCr & rngPageContent
End Sub
相关问题