Python处理Excel多工作表:迭代处理后保存至新文件的方法
解决方案
直接使用pandas的ExcelWriter对象即可实现将多个处理后的DataFrame写入同一个Excel文件的不同工作表,以下是完整实现代码及关键说明:
完整代码示例
import pandas as pd # 替换成你的自定义数据处理函数 def process_data(df): # 示例处理逻辑:新增一列,值为原某列的2倍 if 'old_column' in df.columns: df['processed_column'] = df['old_column'] * 2 # 这里可以添加你的其他处理逻辑,比如数据清洗、过滤、计算等 return df # 输入输出文件路径 input_excel = "Myfile.xlsx" output_excel = "Myfile_processed.xlsx" # 使用with语句自动管理ExcelWriter资源,无需手动关闭 with pd.ExcelWriter(output_excel, engine='openpyxl') as writer: # 读取原Excel文件,获取所有工作表名称 original_xls = pd.ExcelFile(input_excel) # 遍历每个工作表 for sheet_name in original_xls.sheet_names: # 读取当前工作表为DataFrame raw_df = pd.read_excel(original_xls, sheet_name=sheet_name) # 执行自定义处理 processed_df = process_data(raw_df) # 将处理后的数据写入新文件的对应工作表 processed_df.to_excel(writer, sheet_name=sheet_name, index=False)
核心逻辑说明
- ExcelWriter的作用:这是实现多工作表写入的关键,它相当于一个写入上下文,所有
to_excel操作都会指向同一个文件,不会覆盖已写入的工作表。如果直接单独调用df.to_excel(),每次都会创建新文件覆盖之前的内容。 - 获取工作表名称:通过
original_xls.sheet_names可以自动获取原文件中所有工作表的名称,不管名称是什么都能遍历处理。 - 保持工作表同名:写入时指定
sheet_name=sheet_name,确保新文件的工作表名称和原文件完全一致。 - 自动资源管理:使用
with语句包裹ExcelWriter,会在代码块结束后自动关闭文件,避免资源泄漏。
注意事项
- 依赖库安装:需要确保已安装
pandas和openpyxl(或xlsxwriter),可以通过pip install pandas openpyxl安装。 - 格式丢失问题:
pandas读取Excel时会忽略原文件的格式(如合并单元格、字体样式等),处理后写入的新文件也不会保留这些格式,如果需要保留原格式,需使用openpyxl直接操作Excel文件而非转为DataFrame处理。 - 索引参数:
to_excel中的index=False用于避免将DataFrame的索引列写入Excel,若需要保留索引可移除该参数。
内容的提问来源于stack exchange,提问作者Sri2110
相关产品推荐
相关产品推荐

