将不同DataFrame数据写入Excel后文件损坏,求代码问题排查
问题原因
你的代码触发Excel损坏提示的核心问题有3处:
- 传给
load_workbook和pd.ExcelWriter的FilePath为文件夹路径C:\Users\test,而非完整的目标Excel文件路径。读写Excel的接口要求传入具体的文件路径,传入文件夹路径会导致工作簿结构写入异常,最终生成的文件不符合Excel格式规范。 - 直接对
writer.book赋值绑定工作簿的写法不符合高版本pandas的规范,很容易触发底层读写逻辑异常。 - 没有处理同名工作表冲突的逻辑,如果目标文件中已经存在名为
Drip的工作表,写入时会破坏原有文件结构。
修复后可运行代码
import os,glob import pandas as pd master_file='combined_csv.xlsx' # 设置工作目录 work_dir = r'C:\Users\test' os.chdir(work_dir) # 设置目标文件后缀 extension = 'csv' # 将所有后缀为csv的文件存入数组 all_filenames = [i for i in glob.glob('*.{}'.format(extension))] col_to_keep=["Name", "Area (ft)", "Length (ft)", "Center (ft)", "ID", "SyncID"] # 首次写入生成基础Excel文件 combine_csv = pd.concat([pd.read_csv(f, delimiter=';', usecols=col_to_keep) for f in all_filenames]) combine_csv.to_excel(master_file, index=False,sheet_name='All') # 完整的目标Excel文件路径 full_excel_path = os.path.join(work_dir, master_file) # 初始化追加模式的ExcelWriter,自动处理已有工作簿加载 # if_sheet_exists='replace'表示如果工作表已存在则覆盖,也可改为'new'自动重命名或'error'抛出错误 with pd.ExcelWriter(full_excel_path, engine='openpyxl', mode='a', if_sheet_exists='replace') as writer: # 读取目标csv生成DataFrame drip_file = pd.read_csv(all_filenames[0], delimiter = ';', usecols=col_to_keep) # 写入新工作表 drip_file.to_excel(writer, sheet_name = 'Drip', index=False)
补充说明
如果你需要批量将多个DataFrame写入为独立工作表,直接在上述with代码块内循环遍历你的DataFrame列表,依次调用to_excel指定不同的sheet_name即可,不需要手动调用save和close,with上下文管理器会自动处理资源释放和文件保存。
内容的提问来源于stack exchange,提问作者rcheeks23
相关产品推荐
相关产品推荐

