Word有一些内置样式,在Word里面显示为“预设样式”,我们可以直接拿来使用。内置样式非常多,但样式类型大致可以分为四种,分别是字符样式、列表样式、段落样式、表格样式,它们定义在WD_STYLE_TYPE这个枚举类里。我们这里先拿段落样式进行演示,代码如下:
from docx import Documentdoc = Document()# 列表paragraph = doc.add_paragraph( "有序段落List") print(paragraph.style.name)# 输出: Normalparagraph.style = "List" doc.add_paragraph( "有序段落List 2", style = "List 2") doc.add_paragraph( "有序段落List 3", style = "List 3")# 列表编号doc.add_paragraph( "有序段落List Number", style = "List Number") doc.add_paragraph( "有序段落List Number 2", style = "List Number 2") doc.add_paragraph( "有序段落List Number 3", style = "List Number 3")# 列表项目符号doc.add_paragraph( "无序段落List Bullet", style = "List Bullet") doc.add_paragraph( "无序段落List Bullet 2", style = "List Bullet 2") doc.add_paragraph( "无序段落List Bullet 3", style = "List Bullet 3") doc.save("./word_ files/test.docx")
执行上面的代码之后得到的效果如图7-1所示。
Paragraph对象有一个style属性控制段落样式,我们只要把样式名赋值给该属性就可以引用样式。当然也可以在调用add_paragraph()方法新增段落的时候就引用样式,该方法的第二个参数就是样式名。如果不设置段落的样式,则默认样式名是“Normal”,也就是Word里的第一个内置样式“正文”。
还要注意样式名是一个字符串,这些内置的样式名都是固定的,所以不能写错了。既然样式名是固定的,那我们怎么查看都有哪些样式呢?我们干脆读取Document的styles取出全部样式,然后过滤出类型为段落的样式,代码如下:
from docx import Documentfrom docx.enum.style import WD_STYLE_TYPEdoc = Document() styles = doc.stylesparagraph_styles = [s for s in styles if s.type == WD_STYLE_TYPE.PARAGRAPH ] for style in paragraph_styles: print(style.name)# 输出:# Normal# Header# Footer# Heading 1# Heading 2#...
代码中通过列表推导式拿到全部内置段落样式,一共有36个。每一个样式对应的类都是继承BaseStyle类的,BaseStyle对象的type属性用于区分样式类型,所以我们让type等于 WD_STYLE_TYPE.PARAGRAPH的样式保留下来,而name属性表示样式名,把它打印出来看一下,我们在引用样式的时候就直接写这些样式名就可以了。
关于WD_STYLE_TYPE,它是一个枚举类,这里一共定义了四种类型,分别是CHARACTER(字符)、LIST(列表)、PARAGRAPH(段落)和TABLE(表格),如果以后有需要的话可以按照这种方式进行过滤。