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

标签 python-3.x xlsm

我在 Mac 上使用 python 3.8.1,并尝试从头开始创建 .xlsm 文件。我查看了 openpyxl 和 xlsxwriter,它们都能够从头开始创建 .xlsx 文件,并且都可以编辑现有的 .xlsm 文件,但我找不到任何东西关于实际从头开始创建 .xlsm 文件。

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

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

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

最佳答案

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

运行 Alexander 的代码时出现此错误:

Exception ignored in: Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/zipfile.py", line 1819, in del self.close() File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/zipfile.py", line 1836, in close self.fp.seek(self.start_dir) ValueError: I/O operation on closed file.

我对此进行了尝试,发现如果我从 load_workbook 函数中取出 keep_vba=True ,代码就会运行,但我仍然收到上面提到的错误尝试使用 Excel 打开 .xlsm 文件。

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

I/O operation on closed file.

我查看了 openpxyl 文档,并尝试在不使用 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')

关于python-3.x - 有没有办法在 python 中从头开始创建 .xlsm 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59585265/

相关文章:

excel - 单个 Excel 工作表中的多个 NamedStyle - Python openpyxl

excel - 根据变量定义的路径从多个关闭的工作簿中导入数据

vba - 将 .xls 转换为 .xlsx 的宏使 Excel 崩溃

java - 使用 XSSF SAX 读取并使用 SXSSF 流式输出数据 - POI

python - 如何在 python 文件中包含文本

python-3.x - 为什么numba cuda调用几次后运行速度变慢?

python - 如何批量处理 get 请求中的 URL 列表?

python - Django ValueError : Field 'id' expected a number but got 'S'

excel - 在VBA中粘贴特殊值