微软的Office系列具有非常厉害的技术,但产品具有极高的学习成本,例如在查找替换这一项,它不支持标准的正则表达式(毕竟是wysiwyg嘛,也要考虑样式),但不是基于正则表达式定制,而是自己另辟蹊径,这就有点让人难受了。而内置的Word VBA的相关文档和Demo又很少,基本要靠录制宏来现学现卖,而录制宏生成的代码过于adhoc,难以泛化,所以这时候借助于Python来处理相关文档就显得比较有意义。
Word VBA实例
以下面这个为例,为了将一个小数转成百分数表示,我们先要搜索0.([0-9]{2})([0-9]@)^13
这个串,其中^13
表示换行符,@
表示一个以上的字符或者表达式,类似于非贪心的+
,在这里不太清楚@
和*
的行为有什么区别。
1 | Sub DoReplace() |
Word
Word上的操作主要依赖docx
这个库。
我们用一个Document
维护一个文档。
一个文档由很多的段落组成,可以用下面的办法进行枚举。
1 | for p in doc.paragraphs: |
需要注意的是,paragraph
是一个getter/setter方法
1 | # document.py |
一个paragraph由很多个run组成,如果单纯设置或者访问paragraph.text
,会丢掉格式。
1 | # paragraph.py |
加图片document.add_picture
,会先在document的最后加上一个paragraph和run,在这个run里面加上picture
1 | def add_picture(self, image_path_or_stream, width=None, height=None): |
Excel+Pandas
可以通过Pandas来操作Excel,这里详见Pandas的介绍