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

如何用openpyxl分离提取Excel表格与普通单元格数据

提取Excel中非表格区域的普通单元格数据(基于openpyxl)

要提取Excel中不属于「插入表格」创建的专用表格的普通单元格数据,关键是先把所有表格的单元格范围标记出来,遍历工作表时跳过这些区域的单元格就行。openpyxl自带工具能解析表格的范围字符串,用这个来实现排除逻辑最稳妥。

完整代码实现

import pandas as pd
from openpyxl import load_workbook
from openpyxl.utils import range_boundaries

# Load the workbook
workbook_path = '/path/to/your/excel/file.xlsx'
workbook = load_workbook(workbook_path)

# 存储每个工作表的非表格数据
non_table_dataframes = {}

# 遍历所有工作表
for sheet_name in workbook.sheetnames:
    worksheet = workbook[sheet_name]
    non_table_data = []
    excluded_ranges = []
    
    # 收集所有表格的单元格范围(起止行、起止列)
    if worksheet.tables:
        for table in worksheet.tables.values():
            # 解析表格的ref字符串为具体的行列边界
            min_col, min_row, max_col, max_row = range_boundaries(table.ref)
            excluded_ranges.append((min_row, max_row, min_col, max_col))
    
    # 遍历每个单元格,跳过表格内的单元格
    for row in worksheet.iter_rows():
        current_row_data = []
        for cell in row:
            # 判断当前单元格是否在表格范围内
            is_in_table = False
            for (min_r, max_r, min_c, max_c) in excluded_ranges:
                if min_r <= cell.row <= max_r and min_c <= cell.column <= max_c:
                    is_in_table = True
                    break
            # 不在表格内则保留值,否则填充None(维持原行列结构)
            current_row_data.append(cell.value if not is_in_table else None)
        # 可选:过滤掉排除表格后完全为空的行
        if any(val is not None for val in current_row_data):
            non_table_data.append(current_row_data)
    
    # 生成非表格数据的DataFrame
    non_table_dataframes[sheet_name] = pd.DataFrame(non_table_data) if non_table_data else pd.DataFrame()

# 查看指定工作表的非表格数据
sheet_name_to_access = 'Sheet1'
print(non_table_dataframes[sheet_name_to_access])

关键逻辑说明

  • 解析表格范围:用openpyxl.utils.range_boundaries直接将表格的ref字符串(如"A1:C5")转换成行列边界值,避免手动解析字符串的错误。
  • 标记排除区域:把所有表格的起止行、起止列存储在列表中,后续用来快速判断单元格是否属于表格。
  • 过滤单元格:遍历每个单元格时,检查其坐标是否在表格范围内,不在则保留值;若想完全移除表格位置的占位(不保留None),可修改内层逻辑直接跳过该单元格,但会导致行列结构变化,需根据需求调整。
  • 过滤空行:可选步骤,剔除掉排除表格后完全为空的行,减少DataFrame中的无效数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 19:43:12