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

2023-12-11

写一个pandas.DataFrame到 Excel 工作簿中.xlsx格式很简单:

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 into a .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其中将包含我的宏。但是,我更愿意自动执行此操作,而不需要额外的步骤。

The 的文档to_excel method表明这应该是可能的(参见engine范围)。但是,我不明白如何启用此功能。

当我简单地将输出文件名更改为*.xlsm, a .xlsx文件被创建,它是named .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。

Using df.to_excel('test.xlsx', engine='openpyxl')按照建议也没有解决问题。


Pandas 要求工作簿名称以结尾.xls or .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()

这将创建一个 Excel 文件,其中包含.xlsm扩大。

However,由于名为“扩展强化”的功能,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()

See the 使用 VBA 宏有关详细信息,请参阅 XlsxWriter 文档部分。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • Espresso:为什么选择后旋转器不关闭?

    我有一个关于在 Spinners with Espresso 中选择项目的问题 或者更准确地说 选择有效 但之后视图断言失败 因为微调器仍然打开 假设我有一个非常简单的活动 其中包含一个微调器和一个显示选择的文本视图 如下所示 现在 我编写
  • 创建带有导航栏和后退按钮的模态视图

    我想创建一个带有导航项的模式视图 屏幕截图中的右侧视图 并且我希望它有一个 后退按钮 我的应用程序是 TabBar 应用程序 我不希望此视图有选项卡栏 但我想使用类似于 push 类型的 segue 加载上一个视图 屏幕截图中的左侧视图 我
  • 如何从自定义列表在 Room 中创建 TypeConverter?

    我做了一个 TypeConverter 但出现错误 无法为类创建转换器 models lastanime EpisodesEntityfor 方法 EpisodesApi getEpisodes 我无法完全理解如何制作 TypeConver
  • Python文件权限中的Zipfile

    i used zipfilelib 从 zip 中提取文件 现在解压目录后我发现我的文件的权限已损坏 import zipfile fh open sample zip rb z zipfile ZipFile fh print z nam
  • 如何更改 Grails 中的 joda--time 默认日期时间格式

    我正在使用 Grails 2 0 3 groovy 1 8 6 和 joda time 1 3 1 和 joda time templates 插件 一切都很完美 但我想更改日期和时间的显示格式 我怎样才能做到这一点 每个域都是支架式的 因
  • 如何在 iOS >= 4.2.1 Mobile Safari 中自动播放媒体?

    除了用户执行的单击事件的处理程序之外 我似乎无法在 iOS 4 2 1 上的 Mobile Safari 中播放音频媒体 即便如此 如果player play 以任何异步方式调用 ajax setTimeout等 它不起作用 我试过打电话p
  • 使用 Visual Studio 2015 Update 3 创建的 UWP 应用程序包无法安装在手机上

    使用 Visual Studio 2015 Update 3 创建的发布模式 appxbundle 文件无法安装在 Windows Phone 上 这在更新 2 中有效 在手机上安装了现场医疗兵 最终发现了错误 Windows cannot
  • Python 元组列表,需要解包和清理

    假设您有一个列表 例如 x Edgar Robert 获取字符串的最有效方法是什么 Edgar and Robert 例如 并不真正想要 x 0 0 简单的解决方案 并且在大多数情况下是最快的 item 0 for item in x or
  • 一个主键与另一个主键相关可以吗?

    这是我的 ERD 的一部分 Orders 表中的 OrderID 与 Order Details 表中的 OrderID ProductID 主键相关 我不认为主键可以与其他主键关联 但我不确定如何关联这些表 让它们既是主键又是外键 您似乎
  • 与 oracle 通信时应用程序崩溃,除非可执行路径包含空格

    我们的 NET 应用程序存在 x 文件问题 或者更确切地说 混合 Win32 和 NET 应用程序 当它尝试与 Oracle 通信时 它就死掉了 消失了 前往天空中那片巨大的黑色虚空之中 没有事件日志消息 没有异常 什么也没有 如果我们只是
  • TO_DATE函数时区解析错误

    我在尝试解析 Oracle 中的日期时遇到问题 TO DATE Fri May 16 14 30 57 EDT 2014 DY MON DD HH24 MI SS TZD YYYY Error ORA 01821 无法识别日期格式 时区出了
  • Fortran 中的自动类型转换(类型转换)如何工作?

    我正在使用 gfortran 编译器 还请告诉我 gfortran 在执行自动类型转换 类型转换 时是否使用 Fortran 标准以外的其他内容 赋值由 Fortran 2008 第 7 2 节定义 值得注意的是 Cl 7 2 1 3 第
  • 通过 CMake 添加外部库(例如 Eigen)

    我已经处理这个问题几个星期了 我知道我可能只是错过了一个我没有意识到的小步骤 因此 任何见解都将受到高度赞赏 我正在尝试添加一些外部库并在我的 C 项目中使用它们 但似乎无法弄清楚如何 我阅读了互联网上有关添加外部库的所有帖子 但我相信我错
  • Three.js:使用变形目标获取更新的顶点

    我有一些变形目标正在工作 https jsfiddle net 3wtwzuh3 2 使用滑块控件查看变形 但是 我希望能够访问变形后顶点的新位置 如果您在链接的示例中注意到 我正在显示立方体第一个顶点的 y 坐标 但它没有更新 This
  • ORA-01422: PL/SQL 精确获取返回的行数多于请求的行数

    我不断收到此错误 我无法弄清楚出了什么问题 DECLARE 第 1 行错误 ORA 01422 精确提取返回的行数多于请求的行数ORA 06512 在第 11 行 这是我的代码 DECLARE rec ENAME EMPLOYEE ENAM
  • 以编程方式控制折线图中的符号等

    我有一个 JavaFX 应用程序 我希望用户能够控制折线图中的符号 线条样式等 我不想创建多个样式表 而是想将此功能构建到 Java 代码中 感谢 Jewelsea 之前发布的优秀示例 我可以动态更改线条样式 这太棒了 但我无法更改默认符号
  • 此正则表达式 (RegEx) 标志有何含义 /iD

    我想使用这个正则表达式来验证 IPv6 但我想了解它所做的一切https stackoverflow com a 1934546 3112803 gt gt a f0 9 1 4 gt 1 7 a f0 9 gt 8 1 gt 1 0 6
  • .NET 如何从电子邮件中提取嵌入的图像?

    您好 我正在开发 NET 1 1 中的一个项目 我需要从我收到的电子邮件中提取 并将其保存在某处 嵌入图像 有人可以告诉我从哪里开始吗 谢谢 从 POP 服务器下载的电子邮件将是文本格式 您必须解析整个电子邮件 并找到所有 img 标签具有
  • SharePoint Online 中的 Office 365 Workbooks.open 打开空白文件

    我们公司正在使用 Office 365 Pro Plus 的半年更新频道 最近我们从版本 1708 更新到了 1803 我们正在使用一些自动化宏 而不是从 SharePoint 在线租户打开文件 自更新以来 调用了 Workbooks op
  • 将 pandas 数据帧写入 xlsm 文件(启用宏的 Excel)

    写一个pandas DataFrame到 Excel 工作簿中 xlsx格式很简单 import pandas as pd df pd DataFrame firstColumn 5 2 0 10 4 secondColumn 9 8 21