将 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) 的相关文章

  • 使用 LAMBDA 在 Excel 中生成所有排列

    这是一个经常被问到和回答的问题 如何在 Excel 中生成所有排列 2011 https stackoverflow com questions 5724373 permutations in excel 2016 https stacko
  • Python:json_normalize pandas 系列给出 TypeError

    我在 pandas 系列中有数万行像这样的 json 片段df json IDs lotId 1 Id 123456 date 2009 04 17 bidsCount 2 IDs lotId 2 Id 123456 date 2009 0
  • Python,Google Places API - 给定一组纬度/经度查找附近的地点

    我有一个由商店 ID 及其纬度 经度组成的数据框 我想迭代该数据框 并使用 google api 为每个商店 ID 查找附近的关键地点 例如输入 Store ID LAT LON 1 1 222 2 222 2 2 334 4 555 3
  • Scrapy 文件管道不下载文件

    我的任务是构建一个可以下载所有内容的网络爬虫 pdfs 在给定站点中 Spider 在本地计算机和抓取集线器上运行 由于某种原因 当我运行它时 它只下载一些但不是全部的 pdf 通过查看输出中的项目可以看出这一点JSON 我已经设定MEDI
  • 将整数系列转换为交替(双元)二进制系列

    我不知道如何最好地表达这个问题 因为在这里谷歌搜索和搜索总是让我找到更复杂的东西 我很确定这是基本的东西 但对于我的生活来说 我找不到一个好的方法来做到这一点下列 给定一个整数序列 比如说 for x in range 0 36 我想将这些
  • 使用 ElementTree 在 python 中解析 xml

    我对 python 很陌生 我需要解析一些脏的 xml 文件 这些文件需要先清理 我有以下 python 代码 import arff import xml etree ElementTree import re totstring wit
  • pandas groupby 操作缺少数据

    在 pandas 数据框中 我有一列如下所示 0 M 1 E 2 L 3 M 1 4 M 2 5 M 3 6 E 1 7 E 2 8 E 3 9 E 4 10 L 1 11 L 2 12 M 1 a 13 M 1 b 14 M 1 c 15
  • 哪种方式最适合Python工厂注册?

    这是一个关于这些方法中哪一种被认为是最有效的问题 Pythonic 我不是在寻找个人意见 而是在寻找惯用的观点 我的背景不是Python 所以这会对我有帮助 我正在开发一个可扩展的 Python 3 项目 这个想法类似于工厂模式 只不过它是
  • Python:导入模块一次然后与多个文件共享

    我有如下文件 file1 py file2 py file3 py 假设这三个都使用 lib7 py lib8 py lib9 py 目前 这三个文件中的每一个都有以下行 import lib7 import lib8 import lib
  • Office 365 中 Excel 中 Power Pivot 的计算列中正确的 DAX GROUPBY 语法是什么

    将以下语法输入到下面在 Excel Office 365 版本 的 powerpivot 中提供的表 Visits 的计算列公式中 GROUPBY Visits Patient Name First Visit Date MINX CURR
  • 根据标点符号列表替换数据框中的标点符号[重复]

    这个问题在这里已经有答案了 使用 Canopy 和 Pandas 我有数据框 a 其定义如下 a pd read csv text txt df pd DataFrame a df columns test test txt 是一个单列文件
  • 将 Django 中的所有视图限制为经过身份验证的用户

    我是 Django 新手 我正在开发一个项目 该项目有一个登录页面作为其索引和一个注册页面 其余页面都必须仅限于登录用户 如果未经身份验证的用户尝试访问这些页面 则必须将他 她重定向到登录页面 我看到 login required装饰器会将
  • 如何在引发异常时将变量传递给异常并在异常时检索它?

    现在我只有一个空白的异常类 我想知道如何在引发变量时给它一个变量 然后在 try except 中处理它时检索该变量 class ExampleException Exception pass 为其构造函数提供一个参数 将其存储为属性 然后
  • tf.print() vs Python print vs tensor.eval()

    看来在Tensorflow中 至少有三种方法可以打印出张量的值 我一直在读here https www freecodecamp org news debugging tensorflow a starter e6668ce72617 an
  • 用 pandas DataFrame 替换 mysql 数据库表中的行

    Python 版本 2 7 6 熊猫版本 0 17 1 MySQLdb 版本 1 2 5 在我的数据库中 PRODUCT 我有一张桌子 XML FEED 表 XML FEED 很大 数百万条记录 我有一个 pandas DataFrame
  • SQLAlchemy 与 count、group_by 和 order_by 使用 ORM

    我有几个函数需要使用 count group by 和 order by 进行一对多连接 我使用 sqlalchemy select 函数生成一个查询 该查询将返回一组 id 然后我对其进行迭代以对各个记录执行 ORM 选择 我想知道是否有
  • 检查 IP 地址是否在给定范围内

    我想检查一下是否有IP180 179 77 11位于特定范围之间 例如180 179 0 0 180 179 255 255 我编写了一个函数 它将每个 IP 八位字节与其他八位字节进行比较 def match mask IP min ip
  • 删除 VBA 按钮集合

    我正在使用以下脚本在 Excel 中生成按钮 范围正是我希望放置它的位置 Sub CreateAddButton rng As Range Dim btn As Button With Worksheets User Set btn But
  • 从Excel单元格中提取固定长度的数字

    一些类似名称的线程 但仍然无法解决我的问题 我需要从 Excel 字符串中提取固定长度的 NUMBER 值 在我的场景中为 8 位数字 为此目的提供了以下 Excel 公式 MID A1 FIND SUBSTITUTE SUBSTITUTE
  • Tkinter 将鼠标点击绑定到框架

    我一定错过了一些明显的东西 我的 Tkinter 程序中有两个框架 每个框架在网格布局中都有一堆标签 我想将鼠标点击绑定到其中一个而不是另一个 我目前使用 root bind

随机推荐

  • 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