如何读取Excel中红色行起始的表格并存储为多个DataFrame
解决方案
步骤1:识别红色表头行
用openpyxl遍历工作表,定位所有字体颜色为红色的行(对应表格的起始表头行)。以下代码默认红色为RGB(255,0,0)的十六进制表示FFFF0000,若你的Excel红色是其他值,可调整判断条件。
from openpyxl import load_workbook import pandas as pd # 加载Excel文件 wb = load_workbook("your_file.xlsx", data_only=True) ws = wb.active # 需指定工作表的话用 ws = wb["Sheet名称"] red_rows = [] # 遍历所有行,查找含红色字体的行 for row in ws.iter_rows(min_row=1): for cell in row: if cell.font.color and cell.font.color.rgb == "FFFF0000": red_rows.append(row[0].row) break # 找到该行红色字体后跳出,避免重复记录 # 去重并排序 red_rows = sorted(list(set(red_rows)))
步骤2:提取每个表格转为DataFrame
拿到红色行号后,逐个确定表格的起止范围,读取为独立的DataFrame。最后一个表格的结束行设为工作表最大行号。
dfs = [] # 遍历每个红色表头行,提取对应表格 for i in range(len(red_rows)): start_row = red_rows[i] # 确定表格结束行 if i < len(red_rows) - 1: end_row = red_rows[i+1] - 2 nrows = end_row - start_row + 1 else: end_row = ws.max_row nrows = end_row - start_row + 1 # 读取表格:skiprows跳过表头前的行,nrows控制读取行数 df = pd.read_excel( "your_file.xlsx", sheet_name=ws.title, skiprows=start_row-1, nrows=nrows ) dfs.append(df) # dfs列表中依次存储三个表格的DataFrame,可通过dfs[0]/dfs[1]/dfs[2]访问
补充适配场景
- 若红色是单元格填充色而非字体颜色,将判断条件改为:
if cell.fill.fgColor.rgb == "FFFF0000": - 若表格列数不固定,可先获取表头行的有效列数,避免读取空列:
header_row = ws[start_row] max_col = max(cell.column for cell in header_row if cell.value is not None) df = pd.read_excel( "your_file.xlsx", sheet_name=ws.title, skiprows=start_row-1, nrows=nrows, usecols=f"A:{chr(64+max_col)}" )
内容的提问来源于stack exchange,提问作者Vedha
相关产品推荐
相关产品推荐

