用 python 解析 word 文件(三):style
太长了,我决定还是拆开三篇写。
(三)样式篇(style)(本篇)
选你所需即可。下面开始正文。
在前两篇中,我们已经解析出了 paragraph 和 table,那么,如何把它们按顺序组合在一起呢?毕竟,一般的 word 不会固定把表格和文字分开,而是混排在一起的。
答案是,没办法。
可能有的同学在看过前两篇之后,已经亲自动手去玩 python-docx,并且发现了 style 这个东西。我本来也发现了。使用
docx.styles
可以获取全部的样式,并且用
style.type
可以看出,它属于 paragraph 还是 table。那么,如果我这样……
for s in docx.styles: if s.type == WD_STYLE_TYPE.PARAGRAPH: print(s.text) elif s.type == WD_STYLE_TYPE.TABLE: for row in s.rows: for cell in row.cells: print(cell.text)
不就可以按顺序获得所有段落和表格了吗?如果你亲自做过了,你就会发现行不通。通过循环获得的内容,跟 word 里的前后顺序不一样,鬼知道这个 style 是按什么顺序添加上的!
不过,对于单独的 paragraph 或 table 来说,style 还是很有用的。用来判断当前段落或单元格的样式,我用到的属性主要就是 type 和 name 这两个——好吧,还是 type 用的最多。
paragraph.style.type 或 p.runs[i].style.type 是个枚举类型的常量,在库中的主要位置为 docx.enum.____,从本系列文章的第一篇可以看到大概的用法,如果要比较细致地展示 word 文档的样式,style 还是比较重要的。尤其是,如果我们把程序设计为直接写 word 而不是读的时候,更体现出 style 的重要性。比较典型的例子就是,如果页面上有富文本编辑器,或者 markdown 格式编辑器,后台想要导出 word 的时候,肯定要用到 style。
当然,对于设计者来说是非常爽的,但是对于后端程序员来说,还是挺苦逼的。枚举类型没有什么技巧可言,完全就是苦力活。
关于如何解析 word,我就介绍这么多了。这一篇写得比较短,因为 style 我总共也没有用上几种,就只能写点理论知识;二是 style 本来也难以独立成篇,我只是想吐槽一下当时走的弯路。
本文原创自博客园文章,想了解 python 相关技巧,欢迎到我的博客踩踩 ~ 地址:http://www.cnblogs.com/anpengapple/