热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

将pandas数据帧写入xlsm文件(启用了宏的Excel)

如何解决《将pandas数据帧写入xlsm文件(启用了宏的Excel)》经验,为你挑选了1个好方法。

pandas.DataFrame.xlsx格式将Excel 写入Excel工作簿非常简单:

import pandas as pd
df = pd.DataFrame({'firstColumn' : [5, 2, 0, 10, 4], 'secondColumn' : [9, 8, 21, 3, 8]})
print(df)
df.to_excel('test.xlsx')

这使:

   firstColumn  secondColumn
0            5             9
1            2             8
2            0            21
3           10             3
4            4             8

和相应的Excel文件.

有没有还写了一个可能性DataFrame.xlsmExcel文件?这实际上或多或少相同.xlsx,但有可能在文件中存储VBA宏.我需要这个,因为我想在创建文件后插入并运行VBA宏.

但是,在常规xlsx文件上尝试此操作时,我会在弹出窗口中收到以下错误消息:

The following features cannot be saved in macro-free workbooks: VB project.
To save a file with these features, click No, and then choose a macro-enabled file type in the File Type list.
To continue saving as macro-free workbook, click Yes.

然后,我可以手动选择保存.xlsm包含宏的文件.但是,如果没有额外的步骤,我宁愿自动执行此操作.

该方法的文档to_excel表明这应该是可能的(参见engine参数).但是,我不明白如何启用它.

当我只是将输出文件名更改为时*.xlsm,.xlsx会创建一个名为 的文件.xlsm.当我试图打开它时,我明白了

Excel cannot open the file 'myFilename.xlsm' 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.

如果我手动将扩展名更改为.xlsx,我可以再次打开它.

关于这部分pandas文件:

openpyxl:这包括对OpenPyxl 1.6.1的稳定支持,但不包括2.0.0,以及对OpenPyxl 2.0.0及更高版本的实验性支持.

我的版本Openpyxl是1.8.6.更新到2.1.4并没有解决问题.也没有XlsxWriter从0.63 更新到0.6.6.

使用df.to_excel('test.xlsx', engine='openpyxl')建议也没有解决问题.



1> jmcnamara..:

Pandas要求工作簿名称以.xls或结尾.xlsx.它使用扩展名来选择要使用的Excel引擎.

您可以传递临时名称,然后使用以下内容覆盖它:

import pandas as pd

df = pd.DataFrame({'First' : [5, 2, 0, 10, 4], 
                   'Second' : [9, 8, 21, 3, 8]})

writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')

df.to_excel(writer, sheet_name='Sheet1')

workbook  = writer.book
workbook.filename = 'test.xlsm'
# !! Won't load in Excel !!

writer.save()

这将创建一个带有.xlsm扩展名的Excel文件.

但是,由于称为"扩展强化"的功能,Excel将不会打开此文件,因为它知道它不包含宏而实际上不是xlsm文件.(这是您在上面报告的Excel错误.)

您可以使用最新版本的XlsxWriter解决此问题,方法是VbaProject.bin从真实的xlsm文件中提取宏文件并将其插入新文件中:

import pandas as pd

df = pd.DataFrame({'First' : [5, 2, 0, 10, 4], 
                   'Second' : [9, 8, 21, 3, 8]})

writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')

df.to_excel(writer, sheet_name='Sheet1')

workbook  = writer.book
workbook.filename = 'test.xlsm'
workbook.add_vba_project('./vbaProject.bin')

writer.save()

有关详细信息,请参阅XlsxWriter文档的"使用VBA宏"部分.


推荐阅读
author-avatar
可燕戏天
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有