我的知识记录

Python Word插入表格教程:带样式数据填充

用python-docx在Word文档中插入表格,设置行列数、表头、填充数据、表格样式和对齐,从Python列表直接生成规整的Word表格。

场景痛点

写报告、做合同、出报价单,经常需要在Word里插表格。手动插表格、调行列、填数据、设边框样式,一份表格折腾半天。如果数据还来自Excel或数据库,粘贴过去还要调格式。用python-docx可以直接从Python列表生成Word表格,表头、数据、样式一步到位,批量出几十份带表格的文档也不在话下。

用到的库

pip install python-docx

完整代码

# 导入库
from docx import Document
from docx.shared import Pt, Cm, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn

def set_cell_text(cell, text, bold=False, size=10.5, align='center'):
"""设置单元格文字和格式"""
cell.text = ''  # 清空默认段落
para = cell.paragraphs[0]
run = para.add_run(text)
run.bold = bold
run.font.size = Pt(size)
# 设置中文字体
run.font.name = '微软雅黑'
run._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')
# 对齐方式
if align == 'center':
para.alignment = WD_ALIGN_PARAGRAPH.CENTER
elif align == 'left':
para.alignment = WD_ALIGN_PARAGRAPH.LEFT
elif align == 'right':
para.alignment = WD_ALIGN_PARAGRAPH.RIGHT

def insert_table(doc, headers, data, table_style='Table Grid'):
"""
在文档末尾插入表格
headers: 表头列表,如 ['姓名', '部门', '工资']
data: 数据二维列表,每行是一条记录
"""
# 计算总行数:表头1行 + 数据行数
rows = len(data) + 1
cols = len(headers)

# 添加表格
table = doc.add_table(rows=rows, cols=cols)
# 应用表格样式(带边框)
table.style = table_style

# 填充表头
for col_idx, header_text in enumerate(headers):
cell = table.rows[0].cells[col_idx]
set_cell_text(cell, header_text, bold=True, size=11)

# 填充数据行
for row_idx, row_data in enumerate(data, start=1):
for col_idx, cell_text in enumerate(row_data):
cell = table.rows[row_idx].cells[col_idx]
set_cell_text(cell, str(cell_text), bold=False, size=10.5)

return table

if __name__ == '__main__':
doc = Document()

# 标题
doc.add_heading('员工工资表', level=1)

# 表头和数据
headers = ['序号', '姓名', '部门', '基本工资', '岗位津贴', '实发工资']
data = [
[1, '张三', '技术部', 8000, 1500, 9500],
[2, '李四', '市场部', 7000, 2000, 9000],
[3, '王五', '财务部', 7500, 1200, 8700],
[4, '赵六', '人事部', 6500, 1000, 7500],
]

insert_table(doc, headers, data)

# 表格后加一段说明
doc.add_paragraph('注:以上数据为示例,实际以工资条为准。')

doc.save('员工工资表.docx')
print('表格文档已生成:员工工资表.docx')

代码讲解

  • doc.add_table(rows=行数, cols=列数)在文档末尾添加一个空表格,rowscols都是整数。
  • table.style = 'Table Grid'给表格加上黑色边框线,python-docx内置了很多表格样式,比如Light Shading Accent 1Medium Shading 1 Accent 1等。
  • 表头行单独遍历,设置bold=True加粗,字号稍大一点。数据行逐行逐列填充。
  • set_cell_text()封装了单元格文字设置:先清空默认段落,再加run,设置字体、字号、对齐,中文同样要设eastAsia属性。
  • 单元格默认有一个空段落,直接用cell.text = 'xxx'也能填文字,但无法控制格式,所以用add_run的方式更灵活。

运行结果

运行脚本后生成员工工资表.docx,打开可以看到标题下方是一个6列5行的带边框表格,表头加粗居中,数据行居中对齐,表格下方有一行注释文字,格式整齐可编辑。

注意事项

  • python-docx的表格样式名是英文的,不同Word版本内置样式名可能略有差异,Table Grid是最通用的带边框样式。
  • 表格默认宽度是自动适应内容,如果要固定列宽,需要设置table.columns[i].width = Cm(3),同时还要设置每个单元格的宽度才生效。
  • 合并单元格用cell_a.merge(cell_b),可以把相邻多个单元格合并成一个。
  • 表格添加在文档末尾,如果要插入到指定段落中间,需要操作XML位置,复杂场景建议用模板填充方式。

Python Word插入表格教程:带样式数据填充

标签:

更新时间:2026-09-14 21:47:00

上一篇:Python Word合并多个文档为一个教程

下一篇:Python Word批量插入图片教程