我在一个名为Platforms的Excel工作簿中有几个工作表,我将它们附加到Jupyter笔记本中的一个dataframe中,然后我想将合并的dataframe放回一个名为“allPlatforms”的工作表中的原始工作簿中。我试着把模式设置为“w”和“a”。使用if_sheet_exists='overlay'会打乱数据。我想我的代码中缺少了一些关键的东西。
我首先尝试了这个,它的工作原理是它写入工作簿,但它覆盖了整个工作簿:
with pd.ExcelWriter('C:\excel\platforms.xlsm',
mode='w') as writer:
new_df.to_excel(writer, sheet_name='allPlatforms', index=False)
我尝试了这第二,它的作品,如果我不创建allPlatforms工作表之前,我运行它,但我需要的代码运行和运行的原始工作表得到更新,所以它需要工作,如果工作表已经存在。
with pd.ExcelWriter('C:\excel\platforms.xlsm',
mode='a') as writer:
new_df.to_excel(writer, sheet_name='allPlatforms', index=False)
第三次尝试,扰乱数据,但我认为这是最接近的:
with pd.ExcelWriter('C:\excel\platforms.xlsm',
mode='a',
if_sheet_exists = 'overlay') as writer:
new_df.to_excel(writer, sheet_name='allPlatforms', index=False)
编辑1:第四次尝试,如果我使用新的数据集,第三次尝试工作正常,问题似乎出现在我使用原始数据集时,因为它包含对另一个工作簿的引用。没有明显的好处使用:此时if_sheets_exist的“replace”覆盖“overlay”。
编辑2:我错误地将我的工作文件列为.xlsx文件,而不是启用宏的.xlsm文件。写入工作表的问题似乎是写入启用宏的文件的Pandas问题。我还在为这个寻找一个整洁的工作。
1条答案
按热度按时间oyxsuwqo1#
经过更多的研究,我决定将新的dataframe导出到一个xlsx文件,并在我的原始工作簿中引用新的xlsx以获得所需的结果。它不像我希望的那样整洁,但它很好用。
可以按照以下问题使用xlsxwriter写入xlsm文件:
Write pandas dataframe to xlsm file (Excel with Macros enabled)
但它不适合我的需要,因为我需要通过Excel访问文件,这种方法会触发“错误的文件类型警告”。