【发布时间】:2019-08-13 21:41:35
【问题描述】:
我是 python 的绝对初学者,正在开发一个小程序来收集数据并使用 pandas 将多张工作表写入 Excel,它按预期工作。但是使用 pyinstaller 转换为 exe 文件后,它只写第一张纸。无论是在一个文件夹还是一个文件模式下。 我粘贴了可以重现问题的最少代码。 我知道我最后可以只用 writer.save() 一次,但在实际程序中,我在 for 循环中编写了多张工作表,它比最后只保存一次效率更高,并且创建的 xlsx 文件要小得多。
PyInstaller:3.4
Python:3.7.2
熊猫:0.24.2
平台:Windows-10-10.0.17763-SP0
我到处搜索问题,尝试使用 hiddenimports 为 pyinstaller 添加不同的模块,如下所示: hiddenimports=['pandas', 'pandas.io.excel', 'numpy', 'pandas.compat', 'xlsxwriter', 'openpyxl'], 它们都不起作用。
import pandas as pd
writer = pd.ExcelWriter('xlstest.xlsx')
df1 = pd.DataFrame(data=[[1, 2, 3]], columns=("a", "b", "c"))
df2 = pd.DataFrame(data=[[5, 6, 7]], columns=("d", "e", "f"))
df1.to_excel(writer, sheet_name="sheet1", index=False)
writer.save()
df2.to_excel(writer, sheet_name="sheet2", index=False)
writer.save()
【问题讨论】:
-
您是否要创建多个 excel 文件,每个循环迭代一个?否则为什么最终文件会比在每次迭代中写入文件要小。
-
我正在尝试在一个 Excel 文件中创建多个工作表。当我从每个循环中保存每张纸与在循环外保存一次时,最终文件的大小有很大的不同。
-
你不应该在通话之间使用
writer.save()。 XlsxWriter 不支持,并且无论如何都不需要,据我从您的示例中可以看出。如果 Pandas 使用的是 xlsxwriter(它可以选择,因为您没有明确指定它,pd.ExcelWriter('file.xlsx', engine='xlsxwriter')),那么您只会得到一个工作表。如果 Pandas 选择了 openpyxl,那么双重 save() 可能会起作用。这可能解释了两种环境之间的差异。 -
@jmcnamara 有趣
-
你说得对,我应该指定engine='openpyxl',这样可以避免这个问题。
标签: python-3.x pandas pyinstaller