【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

相关文章

mybatis和mybatis-plus设置值为null不起作用问题及解决

《mybatis和mybatis-plus设置值为null不起作用问题及解决》Mybatis-Plus的FieldStrategy主要用于控制新增、更新和查询时对空值的处理策略,通过配置不同的策略类型... 目录MyBATis-plusFieldStrategy作用FieldStrategy类型每种策略的作

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

Python Jupyter Notebook导包报错问题及解决

《PythonJupyterNotebook导包报错问题及解决》在conda环境中安装包后,JupyterNotebook导入时出现ImportError,可能是由于包版本不对应或版本太高,解决方... 目录问题解决方法重新安装Jupyter NoteBook 更改Kernel总结问题在conda上安装了

Goland debug失效详细解决步骤(合集)

《Golanddebug失效详细解决步骤(合集)》今天用Goland开发时,打断点,以debug方式运行,发现程序并没有断住,程序跳过了断点,直接运行结束,网上搜寻了大量文章,最后得以解决,特此在这... 目录Bug:Goland debug失效详细解决步骤【合集】情况一:Go或Goland架构不对情况二:

解决jupyterLab打开后出现Config option `template_path`not recognized by `ExporterCollapsibleHeadings`问题

《解决jupyterLab打开后出现Configoption`template_path`notrecognizedby`ExporterCollapsibleHeadings`问题》在Ju... 目录jupyterLab打开后出现“templandroidate_path”相关问题这是 tensorflo

如何解决Pycharm编辑内容时有光标的问题

《如何解决Pycharm编辑内容时有光标的问题》文章介绍了如何在PyCharm中配置VimEmulator插件,包括检查插件是否已安装、下载插件以及安装IdeaVim插件的步骤... 目录Pycharm编辑内容时有光标1.如果Vim Emulator前面有对勾2.www.chinasem.cn如果tools工

Java多线程父线程向子线程传值问题及解决

《Java多线程父线程向子线程传值问题及解决》文章总结了5种解决父子之间数据传递困扰的解决方案,包括ThreadLocal+TaskDecorator、UserUtils、CustomTaskDeco... 目录1 背景2 ThreadLocal+TaskDecorator3 RequestContextH

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

解决JavaWeb-file.isDirectory()遇到的坑问题

《解决JavaWeb-file.isDirectory()遇到的坑问题》JavaWeb开发中,使用`file.isDirectory()`判断路径是否为文件夹时,需要特别注意:该方法只能判断已存在的文... 目录Jahttp://www.chinasem.cnvaWeb-file.isDirectory()遇