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

如何用Pandas筛选并合并Excel指定范围的可见工作表数据?

Pandas实现指定范围可见工作表数据提取与合并

核心思路拆解

  • 先筛选出所有可见工作表并保留原始顺序
  • 定位起始工作表Main Frames BUP 1的位置
  • 找到第一个含panel的工作表位置,作为提取终止点(不包含该表)
  • 逐个读取目标工作表的指定区域,过滤全空行后合并
  • 输出到单个Excel文件

修正后的完整代码

import os
import pandas as pd

# 用户从GUI选择的文件路径
xl = values["-xl_file-"]
loc = os.path.dirname(xl)

# 读取Excel文件
xls = pd.ExcelFile(xl)
sheets = xls.book.worksheets

# 1. 筛选所有可见工作表,保留原始顺序
visible_sheets = [sheet for sheet in sheets if sheet.sheet_state == 'visible']

# 2. 定位起始工作表的索引
start_idx = None
for idx, sheet in enumerate(visible_sheets):
    if sheet.title == 'Main Frames BUP 1':
        start_idx = idx
        break

# 3. 找到第一个含'panel'的工作表索引(作为终止点,不包含该表)
end_idx = len(visible_sheets)
for idx in range(start_idx, len(visible_sheets)):
    # 不区分大小写匹配'panel',可根据需求调整为大小写敏感
    if 'panel' in visible_sheets[idx].title.lower():
        end_idx = idx
        break

# 4. 遍历目标工作表,读取数据并收集
dfs = []
for sheet in visible_sheets[start_idx:end_idx]:
    # 读取M6:AD37区域:skiprows=5(跳过前5行,从第6行开始),nrows=32(共32行),usecols='M:AD'
    df = pd.read_excel(
        xls,
        sheet_name=sheet.title,
        header=None,
        skiprows=5,
        nrows=32,
        usecols='M:AD'
    )
    # 过滤全空行
    df = df.dropna(how='all')
    dfs.append(df)

# 5. 合并所有数据
final_df = pd.concat(dfs, ignore_index=True)

# 6. 保存结果到新Excel文件
with pd.ExcelWriter(f'{loc}/merged_data.xlsx') as writer:
    final_df.to_excel(writer, sheet_name='Merged', index=False)

关键代码说明

  • 筛选可见工作表:通过列表推导式过滤出sheet_state为visible的工作表,确保只处理符合要求的表
  • 定位起始/终止点:遍历可见工作表列表,分别找到起始表的索引和第一个含panel的表索引,以此截取需要处理的工作表子集
  • 读取指定区域:skiprows=5对应跳过前5行(从Excel第6行开始,即M6),nrows=32对应读取到第37行,usecols='M:AD'指定读取的列范围
  • 过滤全空行:使用dropna(how='all')移除所有单元格为空的无效行
  • 合并数据:先将每个工作表的DataFrame存入列表,最后一次性执行concat,避免循环中重复合并的性能损耗
  • 保存文件:用with语句管理ExcelWriter,确保文件自动正确关闭

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 13:20:29