我正在尝试使用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
答案 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