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

Ior*_*rek 8 python openpyxl

下面是一个简单的片段,用于打开一个 .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()
Run Code Online (Sandbox Code Playgroud)

当文件打开并保存时,它提到文件格式无效/损坏且无法打开。如果 .xlsm 从 wb.save 中删除,它会在选择 excel with Open With 后保存并打开。为什么文件格式无效?

Gha*_*eak 5

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

所以你的load_workbook函数应该是这样的:

wb = load_workbook(filename="C:\\Users\\Mark\\Documents\\Test.xlsm", keep_vba=True)
Run Code Online (Sandbox Code Playgroud)

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


Tom*_*tyn 4

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

笔记

以下情况将会失败:

>>> 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
Run Code Online (Sandbox Code Playgroud)

  • wb = load_workbook(filename='C:\\Users\\Mark\\Documents\\Test.xlsm', read_only=False, keep_vba=True) 这解决了它,我现在可以像这样打开后保存在 xlsm 中 (4认同)