当前位置: 首页 > 面试题库 >

将熊猫数据框写入xlsm文件(启用了宏的Excel)

韩恺
2023-03-14
问题内容

pandas.DataFrame用以下.xlsx格式将a写入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')按建议使用也不能解决问题。


问题答案:

熊猫要求工作簿名称以.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错误。)

您可以通过VbaProject.bin从实际的xlsm文件中提取宏文件并将其插入新文件中来解决最新版本的XlsxWriter的问题:

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宏”部分。



 类似资料:
  • 问题内容: 我正在编写一个脚本,以将带有标头的大.xlsx文件减少到一个csv中,然后根据标头名称仅写有所需列的新csv文件。 我得到的错误是最后一部分代码,它说 我确定我忽略了一些愚蠢的事情,但是我已经阅读了熊猫网站上的to_csv文档,但我仍然感到茫然。我知道我使用了不正确的to_csv参数,但我似乎无法理解我猜的文档。 任何帮助表示赞赏,谢谢! 问题答案: 选择特定列的方法是这样的-

  • 问题内容: 我正在尝试使用模式限定表将熊猫DataFrame写入PostgreSQL数据库。 我使用以下代码: 发生的情况是,大熊猫在名为“ a_schema.test”的表中以“公共”模式进行写入,而不是在“ a_schema”模式的“ test”表中进行写入。 如何指示熊猫使用与公共模式不同的模式? 谢谢 问题答案: 更新:从pandas 0.15开始,支持写入不同的模式。然后,您将可以使用关

  • 问题内容: 如何将大数据文件分块写入CSV文件? 我有一组大型数据文件(1M行x 20列)。但是,我只关注该数据的5列左右。 我想通过只用感兴趣的列制作这些文件的副本来使事情变得更容易,所以我可以使用较小的文件进行后期处理。因此,我计划将文件读取到数据帧中,然后写入csv文件。 我一直在研究将大数据文件以块的形式读入数据框。但是,我还无法找到有关如何将数据分块写入csv文件的任何信息。 这是我现在

  • 问题内容: 我正在使用python 3.6并尝试使用以下代码将json文件(350 MB)下载为pandas数据框。但是,出现以下错误: 我该如何解决错误? 问题答案: 如果以二进制()格式打开文件,则会得到字节。怎么样:

  • wef:使用apache poi写入xlsm(Excel 2007) 当我向文件中写入一个简单的字符串时,我无法打开该文件。错误-“Excel无法打开文件“Test1.xlsm”,因为文件格式或文件扩展名无效”

  • Python是如何将CSV文件读入pandas数据帧的(我可以使用它进行统计操作,可以有不同类型的列,等等)? 我的CSV文件有以下内容: 在R中,我们将使用以下方法读取此文件: 这将返回一个R数据。框架: 有没有类似python的方法来获得相同的功能?