使用pd.to_excel生成的.xlsx文件无法打开求助
我最近在尝试用两个列表生成.xlsx文件:一个是作为工作表名称的list_of_aliases,另一个是对应的数据框列表list_of_dfs。我写的代码如下:
writer = pd.ExcelWriter("test_file.xlsx", engine="xlsxwriter") for sheet_name, df in zip(list_of_aliases, list_of_dfs): df.to_excel(writer, sheet_name=sheet_name)
代码运行时没有报错,但生成的test_file.xlsx文件大小是0kb,用Excel打开时会弹出错误提示:
Excel cannot open the file 'test_file.xlsx' because the file format or file extension is not valid. Verify that the file has not been corrupted and that the file extension matches the format of the file.
我的数据框大概有50行4列,里面没有特殊字符,部分字符串是几句话,应该不是数据内容的问题,有没有大佬能帮忙看看这是咋回事?
兄弟,我一眼就看出问题所在了——你写完数据后没有保存/关闭ExcelWriter对象!
用xlsxwriter引擎的时候,你调用df.to_excel()只是把数据写到了内存里的缓冲区,并没有真正写入磁盘文件。必须手动触发保存动作,或者用上下文管理器自动处理,才能让数据落地。
给你两种简单的解决办法:
方法1:手动调用close()或save()
import pandas as pd # 假设你的list_of_aliases和list_of_dfs已经定义完成 writer = pd.ExcelWriter("test_file.xlsx", engine="xlsxwriter") for sheet_name, df in zip(list_of_aliases, list_of_dfs): df.to_excel(writer, sheet_name=sheet_name) # 关键步骤:保存并关闭writer,二选一即可 writer.close() # 或者 writer.save(),两者效果完全一致
方法2:用with上下文管理器(更推荐)
这种方式会在代码块结束后自动帮你保存并关闭文件,不用手动操作,还能避免忘记关闭的低级错误:
import pandas as pd with pd.ExcelWriter("test_file.xlsx", engine="xlsxwriter") as writer: for sheet_name, df in zip(list_of_aliases, list_of_dfs): df.to_excel(writer, sheet_name=sheet_name) # 离开with块后会自动完成保存,无需额外操作
本质上这是xlsxwriter引擎的特性要求——必须触发显式的保存动作,才能把内存中的数据写入到磁盘文件里。你之前的代码相当于只“准备”了数据,没真正“提交”到文件,所以才会出现0kb的空文件,自然被Excel判定为格式无效啦!
备注:内容来源于stack exchange,提问作者ah2Bwise

