如何读取多个xlsm文件中的指定工作表并合并数据?
解决读取多个xlsm指定工作表并合并的问题
错误原因
你把sheet_name参数传给了glob.glob(),但这个函数仅负责匹配文件路径,根本不支持Excel工作表相关的参数,因此抛出TypeError。
正确实现步骤
1. 先获取所有目标xlsm文件路径
用glob.glob()筛选符合条件的文件路径,不要添加多余参数:
import glob import pandas as pd # 用原始字符串避免路径转义问题,替换成你的实际文件夹路径 file_path = r'C:\your_folder_location' # 匹配所有非临时文件的xlsm(排除~$开头的Excel临时文件) filenames = glob.glob(f"{file_path}\\[!~]*.xlsm")
2. 循环读取每个文件的指定工作表并处理
初始化列表存储处理后的单行数据,逐个文件完成读取、转换、收集:
processed_data = [] for file in filenames: # 读取指定工作表 df_temp = pd.read_excel(file, sheet_name='MySheet') # -------------------------- # 这里写入你的自定义处理逻辑,将df_temp转换成一行数据 # 示例:根据需求提取或计算数据,比如汇总值、关键字段等 single_row = pd.DataFrame({ '来源文件': [file], '总销售额': [df_temp['销售额'].sum()], '平均单价': [df_temp['单价'].mean()], '有效记录数': [len(df_temp)] }) # -------------------------- processed_data.append(single_row) # 合并所有单行数据 final_df = pd.concat(processed_data, ignore_index=True) # 保存合并后的结果 final_df.to_excel('合并结果.xlsx', index=False)
可选:添加异常处理
如果担心部分文件不存在MySheet工作表,可以加try-except跳过错误文件:
processed_data = [] for file in filenames: try: df_temp = pd.read_excel(file, sheet_name='MySheet') # 自定义处理逻辑... processed_data.append(single_row) except Exception as e: print(f"处理文件 {file} 出错: {str(e)}")
内容的提问来源于stack exchange,提问作者lala345
相关产品推荐
相关产品推荐

