使用樣式—— 使用Python讀寫Office文檔之四
本篇文章討論如何設置樣式,以及如何利用Word的樣式管理器。
=========================================================================================================================================================================================================
通常,在排版管理中,與字元內容無關的所有可視要素都可稱之為『樣式』,具體說來,包括字體、顏色、對齊、行間距等等。
在Word(以及帶有文本編輯功能的Office軟體)中,從樣式應用的對象分,常用的樣式類型有字元樣式、段落樣式、表格樣式、枚舉樣式等。python-docx目前主要支持前三類,已經基本滿足日常使用。
每種樣式包含的內容主要有字體(包括字體名稱、顏色、傾斜、加粗)和段落格式(縮進、分頁模式)等。根據樣式應用對象的不同,每類樣式不一定包含所有的內容。例如,字元樣式就沒有段落格式這個內容。
Word有樣式管理器,負責管理內建樣式和用戶自定義樣式。python-docx可以操作這個管理器,把自定義的樣式添加到管理器里,或者從管理器選取一個樣式加以應用。
由於python-docx的樣式設置並不能包含Word的所有樣式設置。因此個人的建議是:
- 當你的操作只是涉及Word本身(例如批量整理文件格式),可以利用Word的圖形界面設置好自定義樣式,然後利用python-docx操作樣式管理器,給特定的對象特定的樣式。
- 當你的操作涉及Word之外的東西,而且對樣式設置的要求不高(例如,HTML轉Word,或者格式比較簡單的文檔,例如公文),可以使用python-docx直接設置樣式。
- 如果你既不能用Word設置自定義樣式(例如需要幾百種樣式類型),又對樣式類型的設置要求很高,則不要用python-docx,考慮VBScript/VBA,或者win32com等功能完備的工具。
1. 創建樣式和設置字體
遊程對象、段落對象和表格對象都有一個成員Style,而這個Style有一個成員Font,包含了字體的所有設置。
如果憑空的創建一個Style,要使用Document對象的Styles集合的add_style方法。下面的例子里添加了10個段落,為每個段落創建一個新的Style。這些Style的區別是字型大小依次增加。
# -*- coding: utf-8 -*-nfrom docx import Documentnfrom docx.shared import Ptnfrom docx.enum.style import WD_STYLE_TYPEnndoc = Document()nfor i in range(10):n p = doc.add_paragraph(u段落 %d % i)n style = doc.styles.add_style(UserStyle%d %i,WD_STYLE_TYPE.PARAGRAPH)n style.font.size = Pt(i+20)n p.style = stylen ndoc.save(4-1.docx)n
對於遊程對象,其字體操作可以直接使用Run.font成員。下面給一個字體變化的一句話:
# -*- coding: utf-8 -*-nfrom docx import Documentnfrom docx.shared import RGBColornfrom docx.oxml.ns import qnnndoc = Document()np = doc.add_paragraph()ntext_str = u一個人的命運啊,當然要靠自我奮鬥,但是也要考慮到歷史的進程。nfor i,ch in enumerate(text_str):n run = p.add_run(ch)n font = run.fontn font.name = u微軟雅黑n # bug of python-docxn run._element.rPr.rFonts.set(qn(w:eastAsia), u微軟雅黑) n font.bold = (i % 2 == 0)n font.italic = (i % 3 == 0)n color = font.colorn color.rgb = RGBColor(i*10 % 200 + 55,i*20 % 200 + 55,i*30 % 200 + 55)n ndoc.save(4-2.docx)n
2. 段落格式
對於段落樣式和表格樣式,有一個段落格式的成員paragraph_format。它相當於Word的這個選項:
相應的,段落格式對象的各種成員,相當於對話框里的這些設置要素:
-
ParagraphFormat.alignment (選擇一個WD_PARAGRAPH_ALIGNMENT)
- ParagraphFormat.left_indent(長度)
- ParagraphFormat.right_indent(長度)
- ParagraphFormat.first_line_indent(長度)
- ParagraphFormat.space_before(長度)
- ParagraphFormat.space_after(長度)
- ParagraphFormat.line_spacing_rule(選擇一個WD_LINE_SPACING)
- ParagraphFormat.line_spacing(長度)
- ParagraphFormat.widow_control(True:設置,None:繼承Style設置)
- ParagraphFormat.keep_with_next(True:設置,None:繼承Style設置)
- ParagraphFormat.keep_together(True:設置,None:繼承Style設置)
- ParagraphFormat.page_break_before(True:設置,None:繼承Style設置)
比如可以這樣設置遞進的左對齊:
# -*- coding: utf-8 -*-nfrom docx import Documentnfrom docx.shared import Cmnfrom docx.enum.style import WD_STYLE_TYPEnndoc = Document()nfor i in range(10):n p = doc.add_paragraph(u段落 %d % i)n style = doc.styles.add_style(UserStyle%d %i,WD_STYLE_TYPE.PARAGRAPH)n style.paragraph_format.left_indent = Cm(i)n p.style = stylen ndoc.save(4-3.docx)n
Word自帶很多樣式。可以利用Document.styles集合來進行訪問builtin屬性為True的自帶樣式。當然,你自己通過add_style增加的樣式,也會放在styles集合里。
對於你自己創建的樣式,若將其hidden和quick_style屬性分別設置為False和True,則可將這個自創建樣式添加到Word的快速樣式管理器里。
下面舉一個綜合的例子。
# -*- coding: utf-8 -*-nfrom docx import Documentnfrom docx.shared import Cmnfrom docx.enum.style import WD_STYLE_TYPEnndoc = Document()nfor i in range(10):n p = doc.add_paragraph(u段落 %d % i)n style = doc.styles.add_style(UserStyle%d %i,WD_STYLE_TYPE.PARAGRAPH)n style.paragraph_format.left_indent = Cm(i)n p.style = stylen if i == 7:n style.hidden = Falsen style.quick_style = Truennfor style in doc.styles:n print style.name,style.builtinn ndoc.paragraphs[3].style = doc.styles[Subtitle]nndoc.save(4-4.docx)n
=======================
到此,這一系列的Word部分就告一段落了。接下來,本系列文章將聊一聊用python操作PowerPoint。
參考:
https://python-docx.readthedocs.io/en/latest/index.html
推薦閱讀:
※隨機數生成
※[新聞] CPython / 微軟 Pyjion / IBM Python+OMR
※國內最火的11個Python開源項目
※Python 中 「is」 和 「==」 的問題?
※量化策略系列教程:12Boll指標策略
TAG:Python | MicrosoftOffice |