批量提取word文档中的表格数据到表格文档中

要批量处理多个 Word 文档,并将每个文件的前三行表格数据逐行输出到 Excel 文件中,可以使用以下完整代码。我们将遍历指定目录下的所有 .docx 文件,提取每个文件的前三行表格数据,并将结果逐行写入 Excel 文件。


完整代码

import os
from docx import Document
from openpyxl import Workbook

# 定义输入目录和输出文件路径
input_dir = r"H:\WPSDrive\303815971\WPS云盘\2025VS code"  # 替换为你的Word文档目录
output_path = r"H:\WPSDrive\303815971\WPS云盘\2025VS code\test.xlsx"  # 替换为你的输出Excel文件路径

# 创建Excel文件和工作表
wb = Workbook()
ws = wb.active
ws.append(["文件名", "字段1", "字段2", "字段3", "字段4", "字段5", "字段6"])  # 表头

# 遍历目录下的所有.docx文件
for filename in os.listdir(input_dir):
    if filename.endswith(".docx"):
        file_path = os.path.join(input_dir, filename)
        print(f"正在处理文件: {filename}")

        # 读取Word文档
        try:
            doc = Document(file_path)
        except Exception as e:
            print(f"读取文件 {filename} 时出错: {e}")
            continue

        # 检查文档中是否有表格
        if not doc.tables:
            print(f"文件 {filename} 中没有表格")
            continue

        # 获取第一个表格
        table = doc.tables[0]

        # 提取前三行的所有字段,并避免重复内容
        data = []
        seen = set()  # 用于记录已经处理过的内容

        for row in table.rows[:3]:  # 只取前三行
            for cell in row.cells:
                cell_text = cell.text.strip().replace(" ", "")  # 去掉空格
                if cell_text and cell_text not in seen:  # 如果内容不为空且未处理过
                    seen.add(cell_text)
                    data.append(cell_text)

        # 将文件名和数据写入Excel的一行中
        ws.append([filename] + data)

# 保存Excel文件
wb.save(output_path)
print(f"所有文件处理完成,结果已保存到 {output_path}")

代码说明

1. 定义输入目录和输出文件路径

  • input_dir:指定包含 Word 文档的目录路径。
  • output_path:指定输出 Excel 文件的路径。

2. 创建 Excel 文件和工作表

  • wb = Workbook():创建一个新的 Excel 工作簿。
  • ws = wb.active:获取活动工作表。
  • ws.append(["文件名", "字段1", "字段2", "字段3", "字段4", "字段5", "字段6"]):添加表头。

3. 遍历目录下的所有 .docx 文件

  • os.listdir(input_dir):列出目录中的所有文件。
  • if filename.endswith(".docx"):筛选出 .docx 文件。
  • file_path = os.path.join(input_dir, filename):构建文件的完整路径。

4. 读取 Word 文档

  • doc = Document(file_path):读取 Word 文档。
  • 如果读取失败,捕获异常并跳过该文件。

5. 检查文档中是否有表格

  • if not doc.tables:如果文档中没有表格,跳过该文件。

6. 获取第一个表格

  • table = doc.tables[0]:获取第一个表格。

7. 提取前三行的所有字段

  • data = []:存储提取的字段。
  • seen = set():记录已经处理过的字段,避免重复。
  • 遍历前三行的每个单元格,去掉空格并添加到 data 中。

8. 将文件名和数据写入 Excel 文件

  • ws.append([filename] + data):将文件名和数据写入 Excel 的一行中。

9. 保存 Excel 文件

  • wb.save(output_path):保存 Excel 文件。

示例

假设目录中有以下两个 Word 文件:

文件 1:冯艳娟.docx

字段1 字段2 字段3
科 室
重症医学科 (ICU)病房
考核时间 2024年1月 -12月

文件 2:李四.docx

字段1 字段2 字段3
姓 名
李四
年龄 30

输出 Excel 文件(test2.xlsx)

文件名 字段1 字段2 字段3 字段4 字段5 字段6
冯艳娟.docx 科室 重症医学科 (ICU)病房 考核时间 2024年1月 -12月
李四.docx 姓名 李四 年龄 30

运行代码

  1. 将代码保存为 yyy.py 文件。
  2. 确保 Word 文档存放在 input_dir 指定的目录中。
  3. 打开命令行,导航到代码所在的目录。
  4. 运行以下命令:
    python yyy.py
    
  5. 如果一切正常,程序会输出:
    所有文件处理完成,结果已保存到 H:\WPSDrive\303815971\WPS云盘\2025VS code\test2.xlsx
    

注意事项

  1. 文件路径

    • 确保 input_diroutput_path 指向正确的路径。
    • 如果路径中包含中文或空格,建议使用原始字符串(r"路径")。
  2. 文件格式

    • 确保文件是 .docx 格式,而不是 .doc 或其他格式。
  3. 依赖库安装

    • 如果尚未安装 python-docxopenpyxl,可以使用以下命令安装:
      pip install python-docx openpyxl
      

通过以上代码,你可以批量处理多个 Word 文档,并将结果逐行写入 Excel 文件。