使用风格
访问风格
使用"Document.styles"属性访问风格:
document = Document()
styles = document.styles
styles
<docx.styles.styles.Styles object at 0x10a7c4f50>
Styles对象可字典访问风格:
styles["Normal"]
<docx.styles.style._ParagraphStyle object at <0x10a7c4f6b>
//查找风格要用英文名
可迭代风格对象.可用BaseStyle上的标识属性,生成已定义风格的各种子集.如,此代码生成已定义段落风格的列表:
from docx.enum.style import WD_STYLE_TYPE
styles = document.styles
paragraph_styles = [
... s for s in styles if s.type == WD_STYLE_TYPE.PARAGRAPH
... ]
for style in paragraph_styles:
... print(style.name)
...
Normal
Body Text
List Bullet
应用风格
"段落","运行"和"表"对象各有个风格属性.给此属性指定风格对象将应用该风格:
document = Document()
paragraph = document.add_paragraph()
paragraph.style
<docx.styles.style._ParagraphStyle object at <0x11a7c4c50>
paragraph.style.name
"Normal"
paragraph.style = document.styles["Heading 1"]
paragraph.style.name
"Heading 1"
也可直接赋值风格名:
paragraph.style = "List Bullet"
paragraph.style
<docx.styles.style._ParagraphStyle object at <0x10a7c4f84>
paragraph.style.name
"List Bullet"
还可在创建时使用风格对象或其名字来应用风格:
paragraph = document.add_paragraph(style="Body Text")
paragraph.style.name
"Body Text"
body_text_style = document.styles["Body Text"]
paragraph = document.add_paragraph(style=body_text_style)
paragraph.style.name
"Body Text"
添加或删除风格
可指定唯一名和风格类型,来给文档添加新风格:
from docx.enum.style import WD_STYLE_TYPE
styles = document.styles
style = styles.add_style("Citation", WD_STYLE_TYPE.PARAGRAPH)
style.name
"Citation"
style.type
PARAGRAPH (1)
使用base_style属性指定新风格应继承的风格:
style.base_style
None
style.base_style = styles["Normal"]
style.base_style
<docx.styles.style._ParagraphStyle object at 0x10a7a9550>
style.base_style.name
"Normal"
只需调用delete()方法,即可从文档中删除风格:
styles = document.styles
len(styles)
10
styles["Citation"].delete()
len(styles)
9
Style.delete()方法从文档中删除风格的定义.它不会影响应用该风格的内容.有未定义风格的内容使用该内容对象的默认风格渲染,如,对段落,则为"普通".
定义符格式
可如下访问风格字体:
from docx import Document
document = Document()
style = document.styles["Normal"]
font = style.font
如下设置字体和大小:
from docx.shared import Pt
font.name = "Calibri"
font.size = Pt(12)
三态属性,可带True,False和None值.True表示打开属性,False表示关闭属性.
无表示"继承".
font.bold, font.italic
(None, None)
font.italic = True
font.italic
True
font.italic = False
font.italic
False
font.italic = None
font.italic
None
下划线有点特殊.True表示单下划线,False表示没有下划线,但如果不需要下划线,则用None.
其他形式(如双划线或虚线)的下划线使用WD_UNDERLINE枚举成员指定:
font.underline
None
font.underline = True
# or perhaps
font.underline = WD_UNDERLINE.DOT_DASH
定义段落格式
用paragraph_format属性,来访问ParagraphFormat对象.
段落格式包括如对齐,缩进,前后间距,分页符和控件等布局.
下面是如何创建有1/4英寸悬挂缩进,上方12磅间距和控件的段落风格的示例:
from docx.enum.style import WD_STYLE_TYPE
from docx.shared import Inches, Pt
document = Document()
style = document.styles.add_style("Indent", WD_STYLE_TYPE.PARAGRAPH)
paragraph_format = style.paragraph_format
paragraph_format.left_indent = Inches(0.25)
paragraph_format.first_line_indent = Inches(-0.25)
paragraph_format.space_before = Pt(12)
paragraph_format.widow_control = True
//这里
使用段落相关的风格属性
段落风格有个指定下个段落风格的next_paragraph_style属性.只在序列(如标题)中出现一次时,最有用.
此时,段落风格,可在完成标题后自动设置回正文风格.
下面是如何将标题1风格的下个段落风格更改为正文文本的示例:
from docx import Document
document = Document()
styles = document.styles
styles["Heading 1"].next_paragraph_style = styles["Body Text"]
可赋值为None或风格来恢复默认:
heading_1_style = styles["Heading 1"]
heading_1_style.next_paragraph_style.name
"Body Text"
heading_1_style.next_paragraph_style = heading_1_style
heading_1_style.next_paragraph_style.name
"Heading 1"
heading_1_style.next_paragraph_style = None
heading_1_style.next_paragraph_style.name
"Heading 1"
控制在WordUI中显示方式的风格
风格属性分两类:行为和格式属性.行为属性控制风格在WordUI中出现的时间和位置.格式属性确定风格如字体大小及段落缩进等内容格式.
风格有五个行为属性:
hidden
unhide_when_used
priority
quick_style
locked
优先级属性用整数值.其他四个风格行为属性是三态的.
在风格库中显示风格
from docx import Document
document = Document()
style = document.styles["Body Text"]
style.hidden = False
style.quick_style = True
style.priorty = 1
从风格库中删除风格
style = document.styles["Normal"]
style.hidden = False
style.quick_style = False
使用传统风格
访问文档中的传统风格
可从风格对象访问文档中的传统风格:
document = Document()
latent_styles = document.styles.latent_styles
支持按风格名len(),迭代和字典风格访问LatentStyles对象:
len(latent_styles)
161
latent_style_names = [ls.name for ls in latent_styles]
latent_style_names
["Normal", "Heading 1", "Heading 2", ... "TOC Heading"]
latent_quote = latent_styles["Quote"]
latent_quote
<docx.styles.latent.LatentStyle object at 0x10a7c4f50>
latent_quote.priority
29
更改传统风格默认值
latent_styles.default_to_locked
False
latent_styles.default_to_locked = True
latent_styles.default_to_locked
True
添加传统风格定义
可在LatentStyles上使用add_latent_style()方法添加新的传统风格.如下:
latent_style = latent_styles["List Bullet"]
KeyError: 无"List Bullet"风格
latent_style = latent_styles.add_latent_style("List Bullet")
latent_style.hidden = False
latent_style.priority = 2
latent_style.quick_style = True
Delete a latent style definition
可用delete()方法删:
latent_styles["Light Grid"]
<docx.styles.latent.LatentStyle object at 0x10a7c4f50>
latent_styles["Light Grid"].delete()
latent_styles["Light Grid"]键错误:没有叫"浅网格"的`传统风格`