以前一直在作相關工做,因爲沒有找到解決最佳解決方案,老辦法思路是 python先將word 轉成pdf,按照頁碼 提取文字,從而實現word的頁索引工做。python
最近研究了一下vba,終於找到了最佳解決方案!!!api
我用AutoIt測試的,AutoIt調用vba測試
#include <MsgBoxConstants.au3> #include <Word.au3> ; 建立應用對象 Local $oWord = _Word_Create() If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Word UDF: _Word_DocOpen 示例", _ "建立新 Word 應用對象時發生錯誤." & @CRLF & "@error = " & @error & ", @extended = " & @extended) ; ***************************************************************************** ; 只讀打開文檔 ; ***************************************************************************** Local $sDocument = 'D:\Desktop\tzcpa\BJ自動打印\新建文件夾\AutoPrinter\log\backupFile\2019-04-03 08h39m03s140\天職業字[2019]11884號\2.單體審計報告2018-標準無保留意見.docx' Local $doc = _Word_DocOpen($oWord, $sDocument, Default, Default, True) If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Word UDF: _Word_DocOpen 示例 1", "打開文檔 '.\Extras\Test.doc' 發生錯誤." & _ @CRLF & "@error = " & @error & ", @extended = " & @extended) ;關鍵部分!!!! ; $doc 是當前活動文檔,Pages是頁碼索引,Item是矩形框索引 改爲請自行更改測試,由於一頁可能有多個矩形框 ;返回值時 活動文檔某一頁的 矩形框中的文本 Local $objPage = $doc.ActiveWindow _ .Panes(1).Pages(2).Rectangles.Item(2).Range.Text MsgBox(1,1,$objPage) MsgBox($MB_SYSTEMMODAL, "Word UDF: _Word_DocOpen 示例 1", "文檔 '" & $sDocument & "' 已成功打開.")
總體思路是調用vba,因爲目前python沒有發現 有庫能夠對 頁對象進行操做,因此採用了調用底層vba來操做spa
在vba中 頁對象有一個是 Rectangles屬性,解釋以下.net
下面的示例返回活動文檔中第一頁的矩形集合。code
Dim objRectangles As Rectangles Set objRectangles = ActiveDocument.ActiveWindow _ .Panes(1).Pages(1).Rectangles
而後順藤摸瓜找到了Rectangles對象能夠操做Range ,這樣就能夠得到某一頁的某一矩形 內的 text,以後對於大多數頁對象的操做也就解決了。對象
python同理,使win32庫調用 vba就行了索引
附vba官方中文文檔https://docs.microsoft.com/zh-cn/office/vba/api/ 以前的思路]https://mp.csdn.net/mdeditor/87099782#文檔