有没有办法在 python 中从头开始创建 .xlsm 文件?

2023-12-02

我在 mac 上使用 python 3.8.1 并尝试创建一个.xlsm文件从头开始。我看过 openpyxl 和 xlsxwriter,它们都能够创建.xlsx文件从头开始,两者都可以编辑现有的.xlsm文件,但我找不到任何有关实际创建的信息.xlsm文件从头开始。

我查看了 openpyxl 文档here和 xlsxwriter 文档here但我还没有找到任何关于如何创建.xlsm文件从头开始。我什至找不到有关如何转换的任何信息.xlsx文件到.xlsm file.

我最接近的是你可以使用vba_extract.py它包含在 xlsxwriter 中,用于提取名为的文件vbaProject.bin从现有的.xlsm文件,然后您可以将其添加到.xlsx文件,然后您可以将其另存为.xlsm文件,但我需要创建一个.xlsm从头开始创建文件,而不是依赖于那里有一些文件来创建它。

有没有 openpyxl、xlsxwriter 或任何其他实用程序可以与 python 3.8.1 一起使用来创建.xlsm从头开始创建文件,而不必依赖现有的.xlsm or a vbaProject.bin文件?与往常一样,正确、解释清楚的答案将被标记为已接受并会被投票。


感谢 Alexander Pushkarev 和 APhillips 帮助解决了这个问题。离开亚历山大的帖子,我找到了一个办法来让它发挥作用。我并不为此感到自豪,但它确实有效。

运行亚历山大的代码我收到此错误:

异常被忽略: 回溯(最近一次调用最后一次):文件 “/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/zipfile.py”, 1819 行,在delself.close() 文件“/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/zipfile.py”, 1836 号线,接近 self.fp.seek(self.start_dir) ValueError: 对已关闭文件进行 I/O 操作。

我玩了一下,发现如果我拿出来keep_vba=True来自load_workbook代码运行了函数,但在尝试打开时仍然出现上面提到的错误.xlsm用 Excel 归档。

所以,查看最新的错误,我看到最后一行说

对已关闭文件的 I/O 操作。

我查看了 openpyxl 文档并尝试在没有keep_vba=True打开之前的选项keep_vba=True它起作用了。

所以请原谅这个丑陋的代码,但这将有助于创建一个.xlsm从头开始文件,而不依赖于任何现有文件(复制和粘贴准备就绪):

from openpyxl import Workbook
from openpyxl import load_workbook

wb = Workbook()
ws = wb.active
ws['A1'] = 42
ws.append([1, 2, 3])
wb.save('new_document.xlsm')
wb1 = load_workbook('new_document.xlsm')
wb2 = load_workbook('new_document.xlsm', keep_vba=True)
wb2.save('new_document.xlsm')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法在 python 中从头开始创建 .xlsm 文件? 的相关文章

随机推荐

  • 最佳实践:301 将 HTTP 重定向到 HTTPS(标准域)

    我一直在寻找完美的 301 重定向 但我找到了很多解决方案 但不知道什么是最好的 这就是我想做的 http 域名 tld https 域名 tld http www domain tld https 域名 tld https www dom
  • AVX512 舍入模式如何工作(或者 NDISASM 只是混淆了)?

    我正在尝试了解具体的AVX512F指令vcvtps2udq 指令的签名是VCVTPS2UDQ zmm1 k1 z zmm2 m512 m32bcst er 手册信息如下 为了尝试理解新的舍入模式 以下代码片段是用 NASM 2 12 02
  • 无法在 Centos 上使用 Diazo (plone.app.theming)

    我使用 plone4 1 和 Diazo 在我的 mac 上制作了一个门户网站 现在 我正在尝试将其部署在我的服务器 CentOs 上 其中还有另一个带有 plone4 0 5 Collectivexdv 的站点 当我使用我的重氮主题运行该
  • 在页面加载时自动记录并保存 Chrome 开发者工具分析数据?

    Chrome 开发者工具在 时间轴 选项卡上提供了一个选项 可以开始 停止记录与内存 绘画 屏幕截图 JS 配置文件相关的分析数据 一旦刷新页面 录制就会自动开始 并在页面加载后停止 有没有办法 1 自动在后台开始录制不需要 在 chrom
  • 如何从 Excel 工作簿中选取值并按活动工作簿上的函数返回它们

    我的目标是实现一些功能 我给它们提供电动机的功率 频率和速度参数 并查看另一个工作簿 其中我有电动机数据 并返回尺寸 轴直径和其他电动机详细信息 由于我还没有掌握太多 VBA 所以我尝试实现一个函数 该函数只需转到另一个工作簿中的单元格并返
  • 通过纹理偏移滚动 2D/3D 背景

    我一直在尝试在 Unity 中使用四边形来显示纹理来制作无限滚动的 2D 背景 我的想法是根据玩家的位置改变四边形的偏移 由于某种原因 当我更改偏移量时 我的图像无法正确重复 并且一旦达到偏移量 2 图像就会完全消失 纹理上 3 个不同 x
  • JSON 和处理未导出的字段

    是否有技术原因导致未导出的字段不被encoding json包含 如果不是 并且这是一个任意决定 即使未导出 是否还可以包含额外的后门选项 例如 要求导出客户端代码以获得此功能感觉很不幸 特别是如果小写字母提供封装或编组结构的决定比它们的设
  • 在 Google 文档中的某些文本后附加列表项的更有效方法

    所以目前 我有一些代码可以让我插入ListItem在 Google 文档中的一段之后 我遇到的唯一问题是 对于我想要完成的任务来说 它似乎过于复杂 这是我的代码 var search This is a test var body Docu
  • 如何保持 .NET 控制台应用程序运行?

    考虑一个在单独线程中启动某些服务的控制台应用程序 它所需要做的就是等待用户按 Ctrl C 将其关闭 以下哪项是执行此操作的更好方法 static ManualResetEvent quitEvent new ManualResetEven
  • 在Python中对大量数组进行排序的最快方法

    我正在尝试在 python 中对大量数组进行排序 我需要一次对超过 1100 万个数组执行排序 另外 如果我可以直接获取对数组进行排序的索引 那就太好了 这就是为什么 到目前为止我正在使用 numpy argsort 但这在我的机器上太慢了
  • C# 代码覆盖率指标

    是否有免费的商用代码覆盖率工具 低至个人 LOC 级别 可用 我知道 VS2008 Team Edition 但不幸的是没有预算购买许可证 所以我正在寻找一种免费的 如啤酒 替代品 有任何想法吗 NCover是 NET 的开源代码覆盖工具
  • 为什么 N3421 不提供 noexcept 限定符?

    In N3421 使运算符函子变得更大 std 函数对象的新特化是 template lt gt struct plus
  • xsd:dateTime 到 Java OffsetDateTime

    为了妥善处理xs 日期时间使用 JAXB 我必须编写自己的转换器String gt java time OffsetDateTime 正如 XML 架构定义中提到的 dateTime 受到 ISO 8601 的启发 我使用OffsetDat
  • SocketIO:通过套接字ID断开客户端连接?

    我有一个带有 SocketIO 和多个连接的节点服务器 如何根据 ID 断开现有套接字 有房间 每个房间都有一个管理员和其他连接 我的目标是使管理套接字能够根据其 ID 使任何其他套接字断开连接 解决方法是向要被踢出的客户端发送一条消息以
  • valgrind:mmap(0x600000,8192)在UME中失败,错误12(无法分配内存)

    我正在关注这个练习 此页面包含安装 Valgrind 3 6 1 的说明 但我当前的 Linux 内核版本不支持此版本的 Valgrind 因此 我安装了 Valgrind 3 11 0 并在运行此命令后按照说明进行操作 valgrind
  • Grails Gorm 如何为每个具体类插入表,其中每个具体类都继承一个抽象类

    大家好 以下是情况 我有一个抽象类 AbstractProfile 和一个具体类 GoogleProfile abstract class AbstractProfile class GoogleProfile extends Abstra
  • C# 程序使用秒表来计时操作时冻结

    我有一个控制灯的 Windows 窗体程序 这种光有自己的类别 我可以做一些事情 比如打开和关闭它 改变颜色等 我可以毫无问题地做到这一点 然而 我想要做的是让灯持续特定的时间 即 100 毫秒或 300 毫秒 取决于使用情况 我尝试使用秒
  • 将 onlongclick 侦听器添加到警报对话框

    我在 android 中有一个 AlertDialog 其中包含来自 sqlite 的好友列表 当我单击列表中的好友姓名时 就会呼叫该好友 我想做的是将一个 longclicklistener 添加到列表中 这样系统就可以提示我删除列表中的
  • 有没有办法在 Postgres 中禁用函数重载

    我和我的用户不在 PL pgSQL 中使用函数重载 每个 模式 名称 元组总是有一个函数 因此 我们希望仅按名称删除函数 更改其签名而不必先删除它 等等 例如 考虑以下函数 CREATE OR REPLACE FUNCTION myfunc
  • 有没有办法在 python 中从头开始创建 .xlsm 文件?

    我在 mac 上使用 python 3 8 1 并尝试创建一个 xlsm文件从头开始 我看过 openpyxl 和 xlsxwriter 它们都能够创建 xlsx文件从头开始 两者都可以编辑现有的 xlsm文件 但我找不到任何有关实际创建的