Python 到 excel,openpyxl 和文件格式无效

Python to excel, openpyxl and file format not valid

以下是打开 .xlsm 文件的简单代码段,使用 python 向其中写入一些值,然后保存。

import openpyxl
from openpyxl import load_workbook

def toExcel():
    wb = load_workbook(filename="C:\Users\Mark\Documents\Test.xlsm")
    ws = wb.worksheets[0]
    ws.cell(row=1, column=1).value = 'foo'
    ws['A2'] = 'bar'
    wb.save("C:\Users\Mark\Documents\Test1.xlsm")

toExcel()

打开和保存文件时,提示文件格式无效/损坏,无法打开。如果从 wb.save 中删除 .xlsm,它将在选择 excel 和打开方式后保存并打开。为什么文件格式无效?

从这里开始:https://openpyxl.readthedocs.io/en/default/tutorial.html#saving-to-a-file

Note

The following will fail:

>>> wb = load_workbook('document.xlsx')
>>> # Need to save with the extension *.xlsx
>>> wb.save('new_document.xlsm')
>>> # MS Excel can't open the document
>>>
>>> # or
>>>
>>> # Need specify attribute keep_vba=True
>>> wb = load_workbook('document.xlsm')
>>> wb.save('new_document.xlsm')
>>> # MS Excel can't open the document
>>>
>>> # or
>>>
>>> wb = load_workbook('document.xltm', keep_vba=True)
>>> # If us need template document, then we need specify extension as *.xltm.
>>> # If us need document, then we need specify attribute as_template=False.
>>> wb.save('new_document.xlsm', as_template=True)
>>> # MS Excel can't open the document

我发现这个 post 因为我试图使用 openpyxl 从头开始​​创建一个 .xlsm 文件。我发现我收到此错误是因为当您加载工作簿时,您需要将 keep_vba=True 作为第二个参数传递给 load_workbook 函数。

所以这就是您的 load_workbook 函数的样子:

wb = load_workbook(filename="C:\Users\Mark\Documents\Test.xlsm", keep_vba=True)

作为旁注, 是我的 post,它讨论了使用 openpyxl 从头开始​​创建 .xlsm 文件。