相比于读取 DOCX 文档,写入的 API 更加丰富,功能更加全面,但是更重要的还是要灵活运用。 创建文档内容时有下面的方法:
- 增加标题:
add_heading(text=u'', level=1)
- 添加分页符:
add_page_break()
- 添加表:
add_table(rows, cols, style=None)
- 添加图片:
add_picture(image_path_or_stream, width=None, height=None)
- 添加段落:
add_paragraph(text=u'', style=None)、add_section(start_type = 2 )
- 保存:
save(path_or_stream )
相较于使用 Word 软件进行编辑、排版得到的 DOCX 文档, 通过 API 更容易生成“良构”的 DOCX 文档。 这里的“良构”,主要是按标题、段落等结构,并不考虑文档的样式。
接下来回对上述方法进行简单的介绍和举例。
from docx import Document
file = Document()
file.add_heading("demo1",0)
<docx.text.paragraph.Paragraph at 0x7feadc648710>
元数据也可以进行修改,例如修改作者:
core_properties = file.core_properties
core_properties.author = 'Li Ming'
file.core_properties.author
'Li Ming'
p=file.add_paragraph("这是添加的第一个段落。\n")
此方法返回对段落的引用,新添加的段落在文档的结尾。新的段落引用被分配给 paragraph
,
但是除非需要,否则在以下示例中将省略该引用。在代码中,添加项目后通常不会对它做任何事情,
因此保留对它的引用并没有多大意义。
还可以使用一个段落作为“指针”,并在其上直接插入一个新段落:
a_p=p.insert_paragraph_before("在上个段落前在插入一个段落。")
这允许将一个段落插入到文档的中间,这在修改现有文档时通常很重要, 而不是从头开始生成。这种方法极大的减少了不必要的修改。
file.add_heading("这是一个默认标题")
file.add_heading("这是一个二级标题",level=2)
<docx.text.paragraph.Paragraph at 0x7feadc649790>
file.add_page_break()
<docx.text.paragraph.Paragraph at 0x7feadc65fa70>
tb=file.add_table(rows=3,cols=3)
表具有几个属性和方法,需要使用这些属性和方法来填充它们。可以通过其行和列索引访问单元格:
cell = tb.cell(0, 1)
行和列索引都是从零开始的,就像在列表访问中一样。确定单元格后,就可以在其中添加一些内容:
cell.text = '这是表格0,1'
对单元格赋值,则通过单元格对象。获取单元格式对象的方法与读取时一样:
row = tb.rows[1]
row.cells[0].text = '1,0'
row.cells[1].text = '1,1'
row.cells[2].text = '1,2'
还可以像这样逐步向表中添加行或列:
row = tb.add_row()
使用上面添加表格行和列的方案,这可能非常方便。 先构建要添加的内容:
records = (
(3, '101', 'Spam'),
(7, '422', 'Eggs'),
(4, '631', 'Spam, spam, eggs, and spam')
)
进行添加:
table = file.add_table(rows=1, cols=3)
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Qty'
hdr_cells[1].text = 'Id'
hdr_cells[2].text = 'Desc'
for qty, id, desc in records:
row_cells = table.add_row().cells
row_cells[0].text = str(qty)
row_cells[1].text = id
row_cells[2].text = desc
file.add_picture('/data/cvdata/basketball1.png')
<docx.shape.InlineShape at 0x7feadc65f530>
要获得所需大小的图像,可以用方便的单位(例如英寸或厘米)指定其宽度或高度:
from docx.shared import Inches
file.add_picture('/data/cvdata/basketball1.png', width=Inches(1.0))
<docx.shape.InlineShape at 0x7feadc64b6e0>
file.save('xx_write.docx')