You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python-docx批量提取多Word文档所有表格并保存?

问题分析及解决方案

原代码核心问题

  • 遍历文档内表格时,每次循环会覆盖df变量,最终仅保留文档中最后一个表格的数据,导致每个文档只提取了一个表格
  • CSV保存逻辑嵌套在文件遍历循环内,每处理一个文件就重复保存所有已提取的表格,造成重复输出和命名混乱
  • 未实现“每个文档的表格保存为独立工作表”的需求,仅生成了零散的CSV文件

修改后的代码方案

方案1:提取所有表格并保存为单独CSV文件(按文件+表格序号命名)

该方案会为每个表格生成独立的CSV文件,文件名包含原Word文档名称和表格序号,方便区分来源:

import os
from docx import Document
import pandas as pd

# 目标文件夹路径
folder = 'C:/Users/trans/downloads/test'
# 获取所有docx文件的完整路径
file_names = [os.path.join(folder, f) for f in os.listdir(folder) if f.endswith(".docx")]

for file_path in file_names:
    # 获取纯文件名(不带路径和后缀)
    base_name = os.path.splitext(os.path.basename(file_path))[0]
    document = Document(file_path)
    
    # 遍历当前文档的所有表格
    for table_idx, table in enumerate(document.tables, start=1):
        # 初始化表格数据容器
        df_data = [['' for _ in range(len(table.columns))] for _ in range(len(table.rows))]
        # 逐行逐单元格提取文本
        for row_idx, row in enumerate(table.rows):
            for col_idx, cell in enumerate(row.cells):
                if cell.text:
                    df_data[row_idx][col_idx] = cell.text.strip()
        
        # 转换为DataFrame并保存
        df = pd.DataFrame(df_data)
        save_path = os.path.join(folder, f"{base_name}_table_{table_idx}.csv")
        df.to_csv(save_path, index=False, encoding='utf-8-sig')
        print(f"已保存:{save_path}")

print("所有表格提取完成!")

方案2:将单个文档的所有表格保存为一个Excel文件的独立工作表

如果需要把同一Word文档内的所有表格整合到一个Excel文件的不同工作表中,使用以下代码:

import os
from docx import Document
import pandas as pd

folder = 'C:/Users/trans/downloads/test'
file_names = [os.path.join(folder, f) for f in os.listdir(folder) if f.endswith(".docx")]

for file_path in file_names:
    base_name = os.path.splitext(os.path.basename(file_path))[0]
    excel_save_path = os.path.join(folder, f"{base_name}_tables.xlsx")
    document = Document(file_path)
    
    # 创建Excel写入对象,实现多工作表写入
    with pd.ExcelWriter(excel_save_path) as writer:
        for table_idx, table in enumerate(document.tables, start=1):
            df_data = [['' for _ in range(len(table.columns))] for _ in range(len(table.rows))]
            for row_idx, row in enumerate(table.rows):
                for col_idx, cell in enumerate(row.cells):
                    if cell.text:
                        df_data[row_idx][col_idx] = cell.text.strip()
            
            df = pd.DataFrame(df_data)
            # 将表格写入对应工作表,表名按序号命名
            df.to_excel(writer, sheet_name=f"表格{table_idx}", index=False)
    
    print(f"已保存:{excel_save_path}")

print("所有表格提取完成!")

关键改进说明

  • 遍历文档时逐个处理并保存每个表格,避免数据被覆盖
  • 优化命名规则,通过“原文件名+表格序号”明确表格来源
  • 增加strip()去除单元格文本的多余空格,提升数据整洁度
  • 方案2使用pd.ExcelWriter实现多工作表写入,完全匹配“每个文档的表格保存为独立工作表”的需求

内容的提问来源于stack exchange,提问作者sunny babau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 20:50:29