用python的docx包可以对word文档进行操作,从而帮助实现办公自动化。
1. 常用基本操作
from docx import Document # 引入包
document = Document() # 形成一个Document对象
paragraph = document.add_paragraph('我是一个段落') # 为
prior_paragraph = paragraph.insert_paragraph_before('另一个段落') # 在最后一个段落之前加一个段落
document.add_heading('一个一级标题',level=1) # document的一级标题,level默认为1
document.add_heading('一个二级标题',level=2)
document.add_heading('一个大标题',level=0) # 添加了一个标题页
document.add_page_break() # 加入分页符
table = document.add_table(rows=2, cols=2) # 加入一个2行2列的表格
cell = table.cell(0, 1) # 表格的第一行第二列的单元格
cell.text = '单元格的文字'
row = table.rows[1] # 取表中的第二行
row.cells[0].text = '流浪地球' # 对行的第一个单元格添加文本
row.cells[1].text = '流浪地球2' # 对行的第二个单元格添加文本
for row in table.rows: # table.row或者.columns都是可以迭代的
for cell in row.cells:
print(cell.text)
row_count = len(table.rows)
row_count = len(table.columns) # 计算表格的行数和列数
row = table.add_row() # 为表格添加空行
row = table.add_row() # 为表格添加空列
下面是一个例子,用来说明如何将既有的数据加入表格中。
# 构建表格需要的数据
items = (
(7, '1024', 'Plush kittens'),
(3, '2042', 'Furbees'),
(1, '1288', 'French Poodle Collars, Deluxe'),
)
# 添加表格到document
table = document.add_table(1, 3)
# 添加表格的标题行
heading_cells = table.rows[0].cells # 构建一个标题行的对象
heading_cells[0].text = 'Qty'
heading_cells[1].text = 'SKU'
heading_cells[2].text = 'Description'
# 逐行添加数据
for item in items:
cells = table.add_row().cells
cells[0].text = str(item.qty)
cells[1].text = item.sku
cells[2].text = item.desc
# 为表格选择一种预制的风格
table.style = 'LightShading-Accent1' # 更多的风格可以参照table style gallery,
# 或者把word中的表格样式名的中间空格删掉就是名字
和word中一样,可以向document文件中添加图片文件。
document.add_picture('image-filename.png')
# 调节图片大小,设置图片在文件中的宽度(英寸或者厘米)
from docx.shared import Inches
document.add_picture('image-filename.png', width=Inches(1.0)) # 也可以把Inches换成Cm
可以对段落设置风格。
document.add_paragraph('这是添加了格式的一个段落', style='ListBullet')
# 与上方等价的
paragraph = document.add_paragraph('这是一个段落')
paragraph.style = 'List Bullet'
段落中的文本可以设置字体加粗和斜体,但是格式不同的同一段中的文本,就是一个run对象。如果要在一个段落中间设置加粗的文本,则至少要三个run对象,即加粗的文本是一个,加粗字体前后的两节文本各是一个。
# 在段落中继续加入内容
paragraph = document.add_paragraph('这是一个段落。')
paragraph.add_run('在段落里加一句话。')
# 对run对象进行加粗或者斜体,使段落中间的部分加粗
paragraph = document.add_paragraph('这是一个段落。')
run = paragraph.add_run('在段落里加一句话。')
run.bold = True # 或者 run.italic
paragraph.add_run(' sit amet.')
# paragraph.add_run('dolor').bold = True 可直接添加字体各是
2. 对docx进行的操作
可以使用Document类生成一个新的docx文档,或者打开一个已有文档,或者另存为一个新文档。
from docx import Document
document = Document() # 创建一个新的文件对象
document.save('test.docx') # 用这个文件对象创建一个新的docx文件
document = Document('existing-document-file.docx') # 打开一个已有文档
document.save('new-file-name.docx') # 将这个文档另存为
可以通过上面的方式打开任何Word2007及之后的版本产生的文档,不支持打开doc文件。也可以像打开一个文本文件一样打开docx文件。
f = open('foobar.docx', 'rb')
document = Document(f)
f.close()
# 或者
with open('foobar.docx', 'rb') as f:
source_stream = StringIO(f.read())
document = Document(source_stream)
source_stream.close()
# target_stream = StringIO()
# document.save(target_stream)
3. 对文本进行操作
通过构建一个 段落格式 来对全文的各个段落进行统一的设置。
可以通过WD_PARAGRAPH_ALIGNMENT枚举类型对设置文本对齐的方式,包括左对齐、右对齐、居中对齐和两端对齐。
from docx.enum.text import WD_ALIGN_PARAGRAPH
document = Document()
paragraph = document.add_paragraph()
paragraph_format = paragraph.paragraph_format # 建一个段落格式的对象
paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER # 居中对齐
paragraph_format.alignment = WD_ALIGN_PARAGRAPH.DISTRIBUTE # 两端对齐
可以设置段落的缩进,包括首行缩进和悬挂缩进。
from docx.shared import Inches
paragraph = document.add_paragraph()
paragraph_format = paragraph.paragraph_format
paragraph_format.left_indent = Inches(0.5) # 左悬挂缩进0.5
paragraph_format.left_indent.inches # 查看缩进属性
paragraph_format.right_indent = Pt(24) # 右悬挂缩进,用的磅值
# 首行缩进
paragraph_format.first_line_indent
paragraph_format.first_line_indent = Inches(-0.25) # 首行左缩进
可以设置段间距和行间距。
from docx.shared import Length # 调出长度设置的对象
paragraph_format.line_spacing = Pt(18) # 18磅的行间距
paragraph_format.line_spacing = 1.5 # 1.5倍行间距
可以设置分页属性。
paragraph_format.keep_together # 使整个段落在一页上
paragraph_format.keep_with_next = True
可以设置字符格式。
from docx import Document
document = Document()
run = document.add_paragraph().add_run() # 设置一个可以调整字体属性的对象
font = run.font
from docx.shared import Pt
font.name = 'Calibri' # 设置字体风格
font.size = Pt(12) # 设置字体为12磅
font.italic = True # 设置为斜体
from docx.shared import RGBColor
font.color.rgb = RGBColor(0x42, 0x24, 0xE9) # 通过RGB设置字体颜色
在使用过程中,我发现使用Python对docx文档中的字体进行设置会比较琐碎,推荐在一个新建的docx文件中设置好各种标题和正文的格式,通过python-docx读取该文件后,将标题和段落加入到文档中去。