使用Python docx创建表格

Python docx是一个用于创建和修改Microsoft Word文档的库。它能够处理各种文档元素,包括表格。本文将介绍如何使用Python docx库创建表格,并提供一些代码示例帮助你入门。

安装Python docx库

在开始之前,你需要先安装Python docx库。你可以使用pip在命令行中安装它:

pip install python-docx

安装完成后,你就可以在你的代码中导入它:

import docx

创建一个简单的表格

首先,让我们创建一个简单的表格。我们将创建一个包含3行3列的表格,并向每个单元格中插入一些文本。

from docx import Document

# 创建一个新的Word文档
doc = Document()

# 创建一个3行3列的表格
table = doc.add_table(rows=3, cols=3)

# 向每个单元格中插入文本
for i in range(3):
    for j in range(3):
        cell = table.cell(i, j)
        cell.text = f"行 {i+1} 列 {j+1}"

# 保存文档
doc.save("example.docx")

在上面的代码中,我们首先创建一个新的Word文档,然后使用add_table方法创建一个3行3列的表格。接下来,我们使用嵌套的循环遍历每个单元格,并使用cell.text属性向其中插入文本。最后,通过调用save方法保存文档。

运行上面的代码后,你将在同目录下找到一个名为example.docx的Word文档。打开它,你将看到一个包含文本的3x3表格。

自定义表格样式

除了插入文本,我们还可以使用Python docx库自定义表格的样式,包括边框、背景颜色和字体等。

from docx import Document
from docx.shared import Pt
from docx.enum.table import WD_ALIGN_VERTICAL, WD_ALIGN_VERTICAL

# 创建一个新的Word文档
doc = Document()

# 创建一个3行3列的表格
table = doc.add_table(rows=3, cols=3)

# 设置表格样式
table.style = "Table Grid"

# 设置表格边框宽度
for row in table.rows:
    for cell in row.cells:
        for border in cell.borders:
            border.width = Pt(1)

# 设置表格对齐方式
table.alignment = WD_ALIGN_VERTICAL.CENTER

# 设置表格背景颜色
for row in table.rows:
    for cell in row.cells:
        cell.fill.solid()
        cell.fill.fore_color.rgb = RGBColor(0, 0, 255)

# 设置表格字体样式
font = table.style.font
font.size = Pt(12)
font.name = "Arial"

# 保存文档
doc.save("custom_table.docx")

在上面的代码中,我们使用style属性设置了表格的样式为"Table Grid",这是Word中内置的一个样式。然后,我们通过遍历每个单元格的borders属性,并使用width属性设置边框的宽度为1磅。

我们还使用alignment属性设置了表格的对齐方式为垂直居中,使用fill属性设置了表格的背景颜色为蓝色。最后,我们通过修改表格的字体样式,将字体大小设置为12磅,字体名称设置为Arial。

运行上面的代码后,你将在同目录下找到一个名为custom_table.docx的Word文档。打开它,你将看到一个自定义样式的3x3表格。

序列图

在本文的最后,让我们使用mermaid语法创建一个序列图,以更好地说明我们的代码是如何创建表格的。

sequenceDiagram
    participant User
    participant Code
    participant Word Document

    User->>Code: 调用add_table(rows=3, cols=3)方法
    Code->>Word Document: 创建一个3行3列的表格
    User->>Code: 循环遍历每个单元格
    Code->>Word Document: 向单元格中