我的知识记录

Python读取Word表格数据方法

用python-docx读取Word文档中所有表格数据,输出为列表或保存为Excel,支持多表格、合并单元格场景,方便批量提取Word表格内容。

场景痛点

手里一堆Word文档,里面有合同附表、报价单、人员名单等表格数据,需要把这些表格内容提取出来整理到Excel里做汇总分析。手动打开每个Word,选中表格复制粘贴到Excel,几十份文档重复几十遍,还容易串行、漏行。用python-docx可以遍历文档里所有表格,把数据结构化读出来,直接存成Excel或CSV。

用到的库

pip install python-docx openpyxl

完整代码

# 导入库
from docx import Document
import openpyxl

def read_all_tables(docx_path):
"""
读取Word文档中所有表格
返回列表,每个元素是一个二维列表(一张表)
"""
doc = Document(docx_path)
all_tables = []

for table_idx, table in enumerate(doc.tables):
table_data = []
for row in table.rows:
row_data = []
for cell in row.cells:
# 去掉单元格首尾空白
cell_text = cell.text.strip()
row_data.append(cell_text)
table_data.append(row_data)
all_tables.append(table_data)
print(f'读取到第 {table_idx + 1} 个表格,共 {len(table_data)} 行')

return all_tables

def save_tables_to_excel(tables, output_path):
"""把多个表格保存到Excel的不同sheet"""
wb = openpyxl.Workbook()
# 删除默认sheet
wb.remove(wb.active)

for idx, table_data in enumerate(tables):
ws = wb.create_sheet(title=f'表格{idx + 1}')
for row_data in table_data:
ws.append(row_data)

wb.save(output_path)
print(f'已保存到Excel:{output_path}')

def print_table_preview(tables, max_rows=5):
"""打印表格前几行预览"""
for idx, table in enumerate(tables):
print(f'\n=== 表格 {idx + 1} 预览 ===')
for row in table[:max_rows]:
print(' | '.join(row))

if __name__ == '__main__':
input_file = '员工工资表.docx'
output_file = 'Word表格提取结果.xlsx'

# 读取所有表格
tables = read_all_tables(input_file)

# 控制台预览
print_table_preview(tables)

# 保存到Excel
save_tables_to_excel(tables, output_file)

代码讲解

  • doc.tables返回文档中所有表格对象的列表,遍历每个表格再遍历table.rows得到每一行,每行row.cells拿到所有单元格。
  • 每个单元格的.text属性直接取出文字,strip()去掉首尾空格和换行。
  • 返回的是二维列表结构:[[行1列1, 行1列2, ...], [行2列1, ...]],和Excel的行列结构一致,方便后续处理。
  • 用openpyxl把每个Word表格写到Excel的一个独立sheet里,create_sheet(title='表格1')新建工作表,ws.append(row_data)逐行写入。
  • 合并单元格在python-docx里会被重复读取——比如横向合并的两个单元格,每行都会读到同样的文字,这是正常行为,导出Excel后可以再去重。

运行结果

运行脚本后控制台打印每个表格的行列数和前5行预览,同时生成Word表格提取结果.xlsx,打开Excel可以看到每个Word表格对应一个sheet,数据行列完整,表头和数据都在,直接可以做进一步分析。

注意事项

  • 嵌套表格(表格里面再套表格)python-docx默认不会递归读取,doc.tables只读顶层表格。
  • 合并单元格读出来的内容会重复,比如一个跨3列的合并单元格,3个cell.text都是同样的内容,导出后需要手动去重。
  • 单元格里如果有多段文字,cell.text会用换行符拼接在一起,需要自己按\n再拆分。
  • 文本框里的表格读不到,python-docx只识别正文层的表格。

Python读取Word表格数据方法

标签:

更新时间:2026-09-15 08:59:06

上一篇:Python读取Word文档全部文字方法详解

下一篇:Python python-docx生成Word文档教程