我在 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(使用前将#替换为@)