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

如何使用Python提取Excel同一工作表中不同位置的多个表格

Python 提取同工作表分散表格的非索引定位方法

以下是不需要提前知道表格位置索引的常用提取方案,按适用场景从高到低排序:

  • 结构化表格直接读取
    如果Excel中的4个表格是官方插入的结构化表格(即通过「插入」-「表格」功能创建的带表名、可筛选的表格,不是手动填充的普通单元格区域),可以直接通过openpyxl的内置接口直接获取所有表格对象,完全不需要定位坐标:
from openpyxl import load_workbook
import pandas as pd

wb = load_workbook("目标文件.xlsx", data_only=True)
ws = wb["Sheet1"]
tables = []

for excel_table in ws.tables.values():
    # 直接读取表格覆盖的单元格范围
    table_range = ws[excel_table.ref]
    # 转换为DataFrame
    df = pd.DataFrame([[cell.value for cell in row] for row in table_range])
    # 首行设为表头
    df.columns = df.iloc[0]
    df = df[1:].reset_index(drop=True)
    tables.append(df)
  • 空边界自动识别
    如果是普通的单元格块,且表格之间用空行/空列分隔,可以通过遍历所有有值的单元格,聚类出连续的非空矩形区域,每个区域就是一个独立表格:
from openpyxl import load_workbook
import pandas as pd
from itertools import groupby

wb = load_workbook("目标文件.xlsx", data_only=True)
ws = wb["Sheet1"]
# 收集所有非空单元格的坐标
filled_cells = [(cell.row, cell.col_idx) for cell in ws if cell.value is not None]
all_rows = sorted({r for r, c in filled_cells})
# 按连续行拆分不同表格的行范围
row_ranges = []
for _, g in groupby(enumerate(all_rows), lambda x: x[0]-x[1]):
    group = [i[1] for i in g]
    row_ranges.append((min(group), max(group)))

tables = []
for start_r, end_r in row_ranges:
    # 匹配当前行范围对应的非空列区间
    cols = [c for r, c in filled_cells if start_r <= r <= end_r]
    start_c, end_c = min(cols), max(cols)
    # 读取表格内容
    data = ws.iter_rows(min_row=start_r, max_row=end_r, min_col=start_c, max_col=end_c, values_only=True)
    df = pd.DataFrame(data)
    df.columns = df.iloc[0]
    df = df[1:].reset_index(drop=True)
    tables.append(df)
  • 表头关键词匹配定位
    如果提前知道每个表格的固定表头关键词(比如第一个表表头含「订单ID」,第二个含「客户姓名」),可以先全局搜索表头所在行,再向下/向右扩展到空行空列确定表格范围,这种方法抗位置变动能力极强,不会识别到无关内容。
  • 格式特征识别
    如果表格有统一的排版规范(比如表头统一加粗、有特定背景色、边框),可以读取单元格样式属性,将符合表头样式的单元格作为表格起始点,再扩展范围提取完整表格,适合格式标准化的企业报表场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:18:00