Python读取Word文档中的表格:从入门到精通

Python读取Word文档中的表格:从入门到精通

在日常办公或数据处理中,Word文档中的表格常常包含大量结构化信息,而手动复制粘贴不仅效率低下,还容易出错。本文将带你全面掌握使用Python读取Word表格的技巧,让你的数据提取自动化起来!

一、准备工作:安装python-docx

python-docx 是Python操作Word文档(.docx)的首选库。安装非常简单:

pip install python-docx

注意:该库不支持旧的 .doc 格式,如需处理 .doc 文件,可先用Word另存为 .docx。

二、读取Word文档中的表格

假设我们有一个名为“销售报表.docx”的文档,其中包含多个表格。以下代码将遍历所有表格并打印其内容:

from docx import Document

doc = Document('销售报表.docx')

for table in doc.tables:
    for row in table.rows:
        for cell in row.cells:
            print(cell.text, end='\t')
        print()  # 换行

三、进阶:获取表格结构

有时我们需要将表格数据转换为更易处理的格式,如列表嵌套字典,或直接转为Pandas DataFrame。以下示例展示如何提取表头和数据:

import pandas as pd

table = doc.tables[0]  # 假设我们只处理第一个表格
headers = [cell.text for cell in table.rows[0].cells]
data = []
for row in table.rows[1:]:
    row_data = [cell.text for cell in row.cells]
    data.append(row_data)

df = pd.DataFrame(data, columns=headers)
print(df)

四、处理合并单元格

合并单元格在Word表格中很常见。python-docx会为每个物理单元格(即使合并后消失)保留位置,但内容可能重复或为空。我们可以通过检测单元格的 tc 元素属性来判断:

def get_cell_text(cell):
    # 如果单元格是合并后的一部分,其内容可能为空或与主单元格相同
    # 更稳妥的方法:检查vMerge或gridSpan属性
    return cell.text if cell.tc and 'vMerge' not in cell.tc.get('w:val') else ''

五、实战:将表格导出为Excel

利用pandas导出到Excel,数据清洗一步到位:

import pandas as pd

# 假设df已经获得
df.to_excel('output.xlsx', index=False)

六、注意事项与常见问题

  • 文档格式: 确保是 .docx 格式,.doc 请先转换。
  • 表格嵌套: 如果表格嵌套在表格内,需递归处理。
  • 性能: 大文档建议逐表处理,避免一次性加载所有表格导致内存占用过高。
  • 中文编码: 正常使用无需特殊处理,但若遇到乱码,检查文件编码或系统区域设置。

七、结语

掌握python-docx操作Word表格,可以极大提升文档数据处理效率。结合pandas、Excel等工具,轻松实现办公自动化。现在,就去试试提取你手头Word文档中的表格数据吧!