Autoit 实现word拆分页解析 (python同理)

Autoit 实现word拆分页解析 (python同理)

背景

之前一直在做相关工作,由于没有找到解决最佳解决方案,老办法思路是 python先将word 转成pdf,按照页码 提取文字,从而实现word的页索引工作。

最近研究了一下vba,终于找到了最佳解决方案!!!

AutoIt

我用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来操作

在vba中 页对象有一个是 Rectangles属性,解释如下

下面的示例返回活动文档中第一页的矩形集合。

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#

posted @ 2019-04-23 17:27  jokerBi  阅读(1152)  评论(0编辑  收藏  举报