【python脚本】word批注批量提取器V2实用版

简介: 【python脚本】word批注批量提取器V2实用版

前言

在经历了VBA提取word批注:

【VBA脚本】提取word文档中所有批注的信息和待解决状态

和python后处理与图形化:

【python脚本】word批注状态批量提取器V1版本

两步处理之后,终于可以进行实用性的探索:word批注批量提取器V2实用版!

实用演示

批注提取器演示

关键技术

python调用VBA

这段代码是从网上找的,思路就是通过win32com.client库来打开word文档,执行宏指令,再关闭word。因此这段代码是有缺陷的,如果当前word已经打开了那么就会执行出错(下个版本一定修复这个问题)。如果打开没有问题,就会执行'exportWordComments_Click'宏。

1. def update_content(url): #打开word,执行宏命令
2.     ret = ""
3.     docApp = win32com.client.DispatchEx('Word.Application')
4.     try:
5.         doc = docApp.Documents.Open(url)
6.         #print("打开文档")
7.         doc.Application.Run('exportWordComments_Click')
8.         #print("执行宏完成")
9.         doc.Save()
10.         ret = url + " 处理成功"
11.     except Exception as e:
12.         print(e + ", 执行失败")
13.         ret = url + " 处理失败"
14.     docApp.Quit()
15.     return ret
16. pass

最开始我的写法是doc.Application.Run('.\vba.docm!exportWordComments_Click'),含义是调用脚本同目录下vba.docm这个里面的宏。之后我发现word之间的宏是共享的,所以是不需要指定文件的,所以这段代码就改成这样了。

python写excel

python写excel使用的是xlsxwriter库,以标题栏的写入为例:

1.     output = excel_name #"D:\MyWork\python\get_comments_v2\log\Date_20220602_173646.xlsx"
2.     workbook = xw.Workbook(output)
3.     worksheet1 = workbook.add_worksheet("sheet1")
4.     worksheet1.activate()
5.     title = ['文件名', 
6.              '批注内容', 
7.              '原文', 
8.              '是否解决', 
9.              '批注者', 
10.              '页', 
11.              '行', 
12.              '日期', 
13.              '文件路径']
14.     bold = workbook.add_format({
15.         'bold':  True,  # 字体加粗
16.         'border': 1,  # 单元格边框宽度
17.         'align': 'left',  # 水平对齐方式
18.         'valign': 'vcenter',  # 垂直对齐方式
19.         'fg_color': '#F4B084',  # 单元格背景颜色
20.         'text_wrap': True,  # 是否自动换行
21.     })
22.     worksheet1.write_row('A1', title, bold)

就搞定了:

打开excel

脚本内打开excel还是用win32com,在这里做了保护,如果检测到excel已经打开了就不再打开,如果没打开的话就把excel打开,用xl_app.Visible = 1来显式的显示界面:

1.     def open_xlsx():
2.         already_open = 0
3.         xl_app = win32com.client.DispatchEx("Excel.Application")
4.         xl_app.Visible = 1
5.         for wb in xl_app.Workbooks:
6.             if(wb.Name == excel_name): #wb.Name只返回文件的名字,不包含路径
7.                 already_open = 1
8.                 break
9.         if(already_open==0):#需要新打开文件
10.             my_wb = xl_app.Workbooks.Open(excel_name)
11.     pass

独立线程

在测试的过程我就发现了(其实早就知道),开始检查 按键按下后,由于执行检查的时间太长了,这个按键就卡在这抬不起来,exe也动不了。所以说需要把按键对应的操作做成独立线程,也就是 按键 -> 提起处理的线程 ->按键抬起(回到了主线程) -> 子线程自己跑着去。所以实际的操作是open_xlsx(),后面的操作是:

1.     def thread_open_xlsx():
2.         t2 = threading.Thread(target=open_xlsx,args=())
3.         t2.start()
4.     pass
5. 
6.     button2 = Button(f3, text='开始检查', command=thread_start_check)

然后按键就和操作解依赖了~

资源链接

链接:https://pan.baidu.com/s/1kC5yYDkXvAmX7deLpXltWA 

提取码:ou0k

--来自百度网盘超级会员V5的分享


相关文章
|
3月前
|
自然语言处理 IDE 前端开发
5个可保存的在线代码片段平台推荐-变成自己的代码词典库
5个可保存的在线代码片段平台推荐-变成自己的代码词典库
168 0
|
10月前
|
Python
【python脚本】word批注批量提取器V2实用版
【python脚本】word批注批量提取器V2实用版
|
13天前
|
XML 存储 C#
自己动手做一个批量doc转换为docx文件的小工具
自己动手做一个批量doc转换为docx文件的小工具
27 0
|
3月前
|
Python
办公自动化-Python如何提取Word标题并保存到Excel中?
办公自动化-Python如何提取Word标题并保存到Excel中?
60 2
VBA如何用Excel数据批量生成Word文档
VBA|用Excel数据批量生成并修改用模板创建的Word文档
|
2月前
word批量图片导出wps office word 图片批量导出
word批量图片导出wps office word 图片批量导出
42 2
|
3月前
|
PHP Python
基于Python中docx与docxcompose批量合并多个Word文档文件并逐一添加分页符
基于Python中docx与docxcompose批量合并多个Word文档文件并逐一添加分页符
131 1
|
10月前
|
缓存 Python
【python脚本】word批注状态批量提取器V1版本
【python脚本】word批注状态批量提取器V1版本
|
索引 Python
【VBA脚本】提取word文档中所有批注的信息和待解决状态
【VBA脚本】提取word文档中所有批注的信息和待解决状态
218 0
【VBA脚本】提取word文档中所有批注的信息和待解决状态
|
Python
Python批量提取多目录下多个word文档中的图片
Python批量提取多目录下多个word文档中的图片
187 0
Python批量提取多目录下多个word文档中的图片