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

2023-10-09 14:40

本文主要是介绍【VBA脚本】提取word文档中所有批注的信息和待解决状态,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

关于word文档的工具,之前做过这个:

针对word.docx文档的关键词索引器

这个工具在我设想中的是用来在项目的后期检查文档中是否还有TBD/TODO这类关键词未清理,检查文档的完成状态。而后,继续探索对于文档质量检查的工具,于是我发现我们很多文档的review是通过批注完成的(当然也有借助网站的),而这些批注的待解决状态并不是非常的直观:

尤其是文档较长的时候,需要一条一条的过(当然了,word里也支持跳到下一个未解决)。如果只有一个文档还好,如果你作为交付负责人,要负责许多文档的交付质量时,一个文档一个文档的看肯定是不现实的,因此我觉得有必要做这样一个统计归档的工具。当然,已经有review网站或者平台做了这种事情,所以我这个工具主要是作为练手,或者是没买这类平台的人。

终极构想

图形化界面操作:

1.选取目录,之后递归得到所有word文档;

2.对每一个word文档,抓取所有的批注,包括文档路径、批注页码、行号、批注内容、原文、批注者、批注时间、批注解决状态,其中批注解决状态是需要的核心信息;

3.设置选项,可以只抓取未解决的批注;

4.抓取成功后将信息整理到需要的excel文档中,以供评审。

抓取批注信息

python抓取批注

最开始我想的是用python来抓取docx里的批注信息,也仿写了代码:

def docx_comments_get(file):document = ZipFile(file)xml = document.read("word/comments.xml")wordObj = BeautifulSoup(xml.decode("utf-8"), features="xml")texts = wordObj.findAll("w:t")for text in texts:print(text.text)
passdef main():docx_comments_get("D:\MyWork\python\测试文档.docx")

但是发现这样做只能抓取批注内容,对于其他的信息很难获取,即使打开了docx里comments.xml源文件,里面的内容也很有限:

其他的信息就散落在他的xml文件里,我的确是不太会处理。所以通过python去提取批注的完整信息这条路基本就走不通了。

VBA抓取批注

于是我就转换了一个方向,通过VBA来获取内部的批注信息,微软自己的工具对word的支持应该做的不能差吧。继续这个方向发现确实,VBA可以把一个word内部的批注信息提供的非常完善。通过word的开发工具进入visual basic的编程界面,开始编写宏文件。

下面是我最终的宏代码:


Public Sub exportWordComments_Click()FileName = Application.ActiveDocument '文件名.docxvarResult = VBA.Split(FileName, ".")FileNameStr = varResult(0) '去除后缀的文件名Path = Application.ActiveDocument.PathFilePath = Path & "\" & FileName '当前文件的完整路径LogPath = Path & "\" & FileNameStr & "_comments.txt" '批注信息的输出目录'Debug.Print (FilePath)If FileName = "False" ThenExit SubEnd IfRows = ActiveDocument.Comments.Count '总的批注数量'Debug.Print (Rows)Open LogPath For Output As #1 '输出txt文件Print #1, "==================================================="For i = 1 To RowsPageNumber = ActiveDocument.Comments(i).Scope.Information(wdActiveEndPageNumber) '批注在第几页CharacterLineNumber = ActiveDocument.Comments(i).Scope.Information(wdFirstCharacterLineNumber) '批注在这页的第几行Scope = ActiveDocument.Comments(i).Scope '批注原文ScopeComment = ActiveDocument.Comments(i).Range '批注内容ScopeDate = ActiveDocument.Comments(i).Date  '批注时间ScopeAuthor = ActiveDocument.Comments(i).Contact '批注作者ScopeDone = ActiveDocument.Comments(i).Done '批注是否被解决'Debug.Print ("原文:" & ActiveDocument.Comments(i).Scope) '原文'Debug.Print (ActiveDocument.Comments(i).Done)'Debug.Print (ActiveDocument.Comments(i).Contact)'Debug.Print (ActiveDocument.Comments(i).Creator)'Debug.Print (ActiveDocument.Comments(i).Date)'Debug.Print (ActiveDocument.Comments(i).Index)'Debug.Print (ActiveDocument.Comments(i).Parent)'Debug.Print (ActiveDocument.Comments(i).Reference)'Debug.Print ("批注内容:" & ActiveDocument.Comments(i).Range) '批注内容'Debug.Print (ActiveDocument.Comments(i).IsInk)'是否包含链接Print #1, "文件:" & FilePathPrint #1, "页:" & PageNumberPrint #1, "行:" & CharacterLineNumberPrint #1, "原文:" & ScopePrint #1, "批注:" & ScopeCommentPrint #1, "日期:" & ScopeDatePrint #1, "批注者:" & ScopeAuthorPrint #1, "是否解决:" & ScopeDonePrint #1, "==================================================="NextPrint #1, ""Close #1End Sub

执行宏命令后,会在word的目录下出现一个 文件名_comments.txt 文件,打开文件可以看到如下信息:

后记

最关键的第一步打通之后,接下来就是通过python递归所有带处理文件,对每一个文件调用宏生成txt,整理所有txt为excel表,对整个程序做图形界面以便使用。

请待后续~

这篇关于【VBA脚本】提取word文档中所有批注的信息和待解决状态的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/173552

相关文章

idea maven编译报错Java heap space的解决方法

《ideamaven编译报错Javaheapspace的解决方法》这篇文章主要为大家详细介绍了ideamaven编译报错Javaheapspace的相关解决方法,文中的示例代码讲解详细,感兴趣的... 目录1.增加 Maven 编译的堆内存2. 增加 IntelliJ IDEA 的堆内存3. 优化 Mave

如何解决mmcv无法安装或安装之后报错问题

《如何解决mmcv无法安装或安装之后报错问题》:本文主要介绍如何解决mmcv无法安装或安装之后报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mmcv无法安装或安装之后报错问题1.当我们运行YOwww.chinasem.cnLO时遇到2.找到下图所示这里3.

浅谈配置MMCV环境,解决报错,版本不匹配问题

《浅谈配置MMCV环境,解决报错,版本不匹配问题》:本文主要介绍浅谈配置MMCV环境,解决报错,版本不匹配问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录配置MMCV环境,解决报错,版本不匹配错误示例正确示例总结配置MMCV环境,解决报错,版本不匹配在col

Feign Client超时时间设置不生效的解决方法

《FeignClient超时时间设置不生效的解决方法》这篇文章主要为大家详细介绍了FeignClient超时时间设置不生效的原因与解决方法,具有一定的的参考价值,希望对大家有一定的帮助... 在使用Feign Client时,可以通过两种方式来设置超时时间:1.针对整个Feign Client设置超时时间

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

Java利用docx4j+Freemarker生成word文档

《Java利用docx4j+Freemarker生成word文档》这篇文章主要为大家详细介绍了Java如何利用docx4j+Freemarker生成word文档,文中的示例代码讲解详细,感兴趣的小伙伴... 目录技术方案maven依赖创建模板文件实现代码技术方案Java 1.8 + docx4j + Fr

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

vue使用docxtemplater导出word

《vue使用docxtemplater导出word》docxtemplater是一种邮件合并工具,以编程方式使用并处理条件、循环,并且可以扩展以插入任何内容,下面我们来看看如何使用docxtempl... 目录docxtemplatervue使用docxtemplater导出word安装常用语法 封装导出方

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

详解C#如何提取PDF文档中的图片

《详解C#如何提取PDF文档中的图片》提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使用,下面我们就来看看如何使用C#通过代码从PDF文档中提取图片吧... 当 PDF 文件中包含有价值的图片,如艺术画作、设计素材、报告图表等,提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使