用python解析word文件(三):style

太長了,我決定仍是拆開三篇寫。
 

(二)表格篇(table)html

(三)樣式篇(style)(本篇)python

選你所需便可。下面開始正文。程序員


 

在前兩篇中,咱們已經解析出了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原本也難以獨立成篇,我只是想吐槽一下當時走的彎路。
相關文章
相關標籤/搜索