Xlsm 文件 Python

问题描述 投票:0回答:2

我想使用 openpyxl 库打开 .xlsm 文件。当我尝试打开它时,它给出了 IndexError:索引超出范围。 我还观察到,如果在运行代码之前删除文件中的所有隐藏工作表,那就没问题了。 你能帮助我吗?因为我不想修改所有有这个问题的文件

我尝试将 read_only 和 keep_vba 修改为 True 但不起作用。

python excel openpyxl hidden xlsm
2个回答
0
投票

Openpyxl 不支持 .xlsm 文件,如果您安装了 Excel,一种选择是使用

win32com.client
。为了节省您一些时间,您需要
pip install pywin32
才能访问该库。

这是打开文件的示例。

import win32com.client
o = win32com.client.DispatchEx("Excel.Application")

# Run in background, if application fails then excel may not close properly.
o.Visible = False
o.ScreenUpdating = False
o.Interactive = False

wb = o.Workbooks.Open('test.xlsm') # enter full path
ws = wb.Worksheets(1) # sheet number starting at 1
ws.cells(1, 1).value = 'test'

o.DisplayAlerts = False # automatically close save prompt.
wb.SaveAs(Filename='test.xlsm') # enter full path
o.DisplayAlerts = True
wb.Close(True)

-2
投票

您面临的问题是由于openpyxl库不完全支持宏和VBA(Visual Basic for Applications),它们可以包含在.xlsm文件中。尝试打开此类文件时,这可能会导致错误。

如果您只需要从文件 .xlsm 中读取数据而不执行宏,您可以尝试使用 data_only=True 属性,这将允许您打开文件而不处理宏。代码如下:

import openpyxl

wb = openpyxl.load_workbook('your_file.xlsm', data_only=True)

但是,如果宏对您很重要并且您不想删除它们,则可能必须寻找更好地支持 .xlsm 文件中的宏的替代库。例如,您可以考虑使用 xlwings 或 pywin32 库,它们提供对 Excel 功能(包括宏)的访问。

© www.soinside.com 2019 - 2024. All rights reserved.