用python操作docx

用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读取该文件后,将标题和段落加入到文档中去。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容