【python-docx 01】python-docx入门

python-docx是一个用于创建和更新Microsoft Word(.docx)文件的Python库。官方文档链接

使用前首先通过pip install python-docx来安装此库。

打开一个文档
from docx import Document
document = Document()

这将打开一个基于默认“模板”的空白文档,几乎是您使用内置默认值在Word中启动新文档时获得的文档。您可以使用python-docx打开并处理现有的Word文档,但我们暂时先学习最基本的功能。

添加段落

段落是Word中的基础,它们用于正文,但也用于标题和列表项目。
这是添加一个最简单的方法:

paragraph = document.add_paragraph('这是一个段落')

可以使用一个段落作为“游标”并在其上方插入一个新段落:

prior_paragraph = paragraph.insert_paragraph_before('你好,')

这允许将段落插入文档的中间,这在修改现有文档时很重要,而不是从头开始修改。

添加标题

一般的文档,正文文本被分成几个部分,每个部分都以标题开头。以下是添加标题的方法:

document.add_heading('这是一个标题')

默认情况下,这会添加顶级标题,Word中显示为“标题1”。当您需要子节的标题时,只需指定所需的级别为1到9之间的整数:
在这里插入图片描述

document.add_heading('这是个标题2', level=2)

如果指定级别0,则添加“标题”段落。这可以很方便的完成了一个相对较短没有单独标题页的文档。

添加分页符

如果你需要对文档进行分页,你需要下一个文本在一个单独的页面,即使你所在页面不是完整的。
分页符可以做到这一点:

document.add_page_break()
添加表格

在word里使用的表格如何用python_docx实现呢?
表格通常由行和列组成,python_docx也一样:

table = document.add_table(rows=2,cols=2)

表具有几个属性和方法,您将需要它们来填充它们。

访问单个单元格可以按照坐标来访问,例如:

cell = table.cell(0, 1)  # 取出第一行第二列的数据

注意,行和列指示是从0开始的,就像python的列表一样。

你可以通过text来给单元格添加内容:
cell.text = '这是单元格里面的内容'

通常,一次访问一行单元格更容易,
例如,先从表格中取出一行(.rows[])或是一列(.columns[]),然后就可以使用cells[]像操作列表一样操作表格。

row = table.rows[1]
row.cells[0].text = '这是单元格里面的内容'
row.cells[1].text = '这是也单元格里面的内容'

在.rows和.columns取出来的数据是可迭代的,这样你就可以直接在使用for循环对表格进行操作:

for row in table.rows:
    for cell in row.cells:
        print(cell.text)

如果你想获取行或列的长度,可以使用len()

row_count = len(table.rows)
col_count = len(table.colums)

你还可以使用增量的方式添加新的行

row = table.add_row()

这对于我们上面提到的可变长度表场景非常方便:

# 获取表格数据
items = (
    (7, '1024', '你好'),
    (3, '2042', 'hello'),
    (1, '1288', 'Hola'),
)

# 添加一个表格
table = document.add_table(1, 3)

# 填充标题行
heading_cells = table.rows[0].cells
heading_cells[0].text = 'A'
heading_cells[1].text = 'B'
heading_cells[2].text = 'C'

# 给表格填充数据
for item in items:
    cells = table.add_row().cells
    cells[0].text = item[0]
    cells[1].text = item[1]
    cells[2].text = item[2]

word的表格有一组预设的表格样式,python-docx同样可以指定摆个样式:
在这里插入图片描述

table.style = 'LightShading-Accent1'

通过将鼠标悬停在Word的表样式库中的缩略图上,可以找到表样式名称,去掉所有的空格就是样式名称,当然首先你要切换到英文环境下。

添加图片

Word中,你可以通过插入添加图片,那python-docx是如何做到这一点的?

document.add_picture('path.png')

括号中是图片的本地路径。
你也可以使用一个类文件对象,本质上就是打开任何文件对象。如果您从数据库或网络检索图像,并且不想获取涉及的文件系统,这就很方便了。

图像大小

默认情况下,添加的图像就是原始大小。这通常比你想要的更大。要设置图像大小,您可以指出图片的宽高,如英寸或厘米:

from docx.shared import Cm, Inches
document.add_picture('path.png', width=Cm(10))

可以自由地指定宽度和高度。如果仅指定一个,python-docx会通过宽高比保持原图片比例,让图像看起来不拉伸。

段落样式

word提供了丰富的段落样式,如下图所示:
在这里插入图片描述
python-docx可以在你创建段落的时候,应用样式:

document.add_paragraph('这是个带样式的段落', style='ListBullet')

你也可以在添加段落后再添加样式:

paragraph = document.add_paragraph('这是个带样式的段落')
paragraph.style = 'ListBullet'

在此示例中,样式使用样式ID“ListBullet”指定。
通常,通过去除样式名称中出现在Word用户界面(UI)中的空格来形成样式ID。
所以风格’列表3号’将被指定为’ListNumber3’。
但是,咱们使用的中文版word就很难受,需要将win系统语言切换到英语,才能查看样式的英文。

粗体和斜体

关于word中的粗体斜体大家一定不陌生
在这里插入图片描述
有以下四点需要了解:

  1. 段落样式可以应用于paragraph对象
  2. 字符样式可以应用于run对象
  3. 链接的样式可以应用于这两种对象。
  4. 因此,中间带有粗体字的段落需要三次运行,一次正常,一个包含该单词的粗体,另一个正常用于后面的文本。

通过向.add_paragraph()方法提供文本来添加段落时,它将被放入单个run对象中。您可以使用段落上的.add_run()方法添加更多内容:

paragraph = document.add_paragraph('段落 ')
paragraph.add_run('你好')

上面的代码会产生一个看起来很普通的段落,除非你看一下XML,否则段落文本被分成run对象的地方并不明显。请注意第一个字符串末尾的尾随空格。你需要明确在运行的开头和结尾出现空格的位置,它们不会在run对象之间自动插入。

Run对象有.bold(加粗)和.italic(倾斜)属性,您可以对run对象进行设置:

paragraph = document.add_paragraph('感谢 ')
run = paragraph.add_run('大家')
run.bold = True # 对‘大家’加粗
paragraph.add_run(' 的照顾')

其产生的文字,看起来像这样:“感谢 大家 的照顾”

如果你对run对象只进行加粗或者倾斜操作,那可以这么写:

paragraph.add_run('dolor').bold = True

这不是必须的,但是很方便:

paragraph = document.add_paragraph('感谢 ')
run = paragraph.add_run('大家').bold = True
paragraph.add_run(' 的照顾')

应用字符样式

除了段落样式,其中指定一组段落级别设置,Word有字符样式指定一组run级别的设置。
一般来说,可以将字符样式视为指定字体,包括其字体,大小,颜色,粗体,斜体等。

像段落样式,字符样式必须已经与你在打开的文档中定义的Document()调用,关于段落样式

添加新run对象时可以指定字符样式:

paragraph = document.add_paragraph('你好 ')
paragraph.add_run('再见', 'Emphasis')

您还可以在运行创建后将样式应用于run对象。

paragraph = document.add_paragraph('你好 ')
run = paragraph.add_run('再见')
run.style = 'Emphasis'

与段落样式一样,样式名称与Word UI中显示的一样。

  • 8
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值