太长了,我决定还是拆开三篇写。 (三)样式篇(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本来也难以独立成篇,我只是想吐槽一下当时走的弯路。
|
|
来自: KM张恒 > 《python笔记》