zoukankan      html  css  js  c++  java
  • 用python解析word文件(三):style

    太长了,我决定还是拆开三篇写。
     

    (二)表格篇(table)

    (三)样式篇(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本来也难以独立成篇,我只是想吐槽一下当时走的弯路。
     
  • 相关阅读:
    Codeforces 1237D. Balanced Playlist
    Codeforces 1237C2. Balanced Removals (Harder)
    使用excel计算指数平滑和移动平均
    HP滤波原理浅学
    第二章平稳时间序列模型——ACF和PACF和样本ACF/PACF
    第二章平稳时间序列模型——AR(p),MA(q),ARMA(p,q)模型及其平稳性
    第一章时间序列基础——差分方程和求解(二)
    R中的par()函数的参数
    你真的懂了R中的stem函数是如何绘制茎叶图的么?
    关于R中的mode()和class()的区别
  • 原文地址:https://www.cnblogs.com/anpengapple/p/8372991.html
Copyright © 2011-2022 走看看