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

遍历多工作表多Excel文件生成单DataFrame及代码修复求助

问题分析与修复代码

原函数仅保留最后一个文件数据的核心问题如下:

  • df_list在每个文件循环内初始化,每次处理新文件都会清空之前的累积数据
  • return df放在了工作表循环内部,导致处理完第一个工作表就直接返回,后续文件和工作表完全没执行
  • 函数参数与内部变量不匹配(比如参数是start_row,代码里却用row_min)
  • 非Excel文件会触发后续代码,导致ws未定义报错
  • 文件路径用硬编码斜杠拼接,跨平台兼容性差

修改后的完整代码:

import os
import pandas as pd
from openpyxl import load_workbook

def excel_to_df(folder, start_row, end_row, start_col, end_col):
    # 将df_list移到最外层,用于累积所有文件的数据
    df_list = []
    
    # 遍历文件夹内所有文件
    for file in os.listdir(folder):
        # 用os.path.join安全拼接文件路径,适配不同操作系统
        exact_file_path = os.path.join(folder, file)
        print(exact_file_path)
        
        # 仅处理xlsx文件,且所有逻辑包裹在if块内,避免非xlsx文件触发报错
        if file.endswith('xlsx'):
            try:
                wb = load_workbook(exact_file_path)
                ws_list = wb.worksheets
                
                # 遍历当前文件的所有工作表
                for worksheet in ws_list:
                    name = worksheet.title
                    cell_values = []
                    
                    # 修正变量名,与函数传入的参数对应
                    for row in worksheet.iter_rows(min_row=start_row, max_row=end_row,
                                                  min_col=start_col, max_col=end_col):
                        cell_values.append([cell.value for cell in row])
                    
                    # 生成当前工作表的DataFrame,空数据则跳过
                    if cell_values:
                        df = pd.DataFrame(cell_values, columns=range(start_col, end_col+1), 
                                         index=[name]*len(cell_values))
                        df_list.append(df)
            except Exception as e:
                print(f"处理文件 {file} 时出错: {str(e)}")
    
    # 所有文件处理完成后,再合并所有DataFrame并导出
    if df_list:
        final_df = pd.concat(df_list)
        final_df.to_csv('整合结果.csv', index=True)
        return final_df
    else:
        print("未找到有效Excel文件或无可用数据")
        return pd.DataFrame()

关键修改点说明

  • 把df_list初始化移至文件循环外,确保所有文件的工作表数据都能被累积
  • 将return、pd.concat、to_csv移到所有循环结束后,保证所有数据都被处理
  • 修正参数与内部变量的名称不匹配问题
  • 用os.path.join替代硬编码路径拼接,提升跨平台兼容性
  • 加入try-except捕获文件加载错误,增强代码鲁棒性
  • 添加空数据判断,避免合并空列表导致的报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:15:32