删除工作表后无法保存工作簿 - openpyxl

Can't save a workbook after deleting sheets - openpyxl

我正在处理 sheet,主要是删除所有 sheet,只删除我需要的那个。我将遍历所有 sheets,并删除对我的任务没有用的 sheets。

删除后,我尝试保存,但出现错误。

File "C:\Users\myUser\Anaconda3\lib\site-packages\openpyxl\workbook\workbook.py", line 130, in active
return self._sheets[self._active_sheet_index]

这是我的脚本

wb = load_workbook("File.xlsx")

ws1 = wb["Employee Info"]
ws1.freeze_panes = None

ws_active = wb.get_sheet_by_name("Employee Info")

### delete other sheets but Employee Info
for sheet in wb.worksheets:
    if sheet.title != 'Employee Info':
        print("removing " + sheet.title)
        wb.remove_sheet(sheet)

print("remaining sheets:")
for sheet in wb.worksheets:
    print("    " + sheet.title)

### TODO
### loop through the files in a directory

### TODO
### see if readable by ETL 

print("saving the wb")

wb.save("modified.xlsx")

删除后,我查看了工作簿。它有我正在寻找的 sheet。只是不确定为什么它没有检测到剩余的 1 sheet.

补充一下,excel文件有8个sheet,我要的sheet是第5个sheet.

wb.remove_sheet() 已被官方 documentation 弃用。我还不能发表评论,但是你在使用 wb.remove() 时会遇到同样的错误吗?

对我来说,这适用于 2.4.2 版本:

import openpyxl

workbook = openpyxl.load_workbook('test.xlsx')

for i in workbook.worksheets:
    if i.title != 'Employee Info':
        workbook.remove_sheet(i)

workbook.save('test2.xlsx')

简单尝试一下,看看它是否有效。 您还可以使用 workbook.sheetnames 查看工作表名称:

for sheet in workbook.sheetnames:
    print(sheet)

在保存之前,您可以使用以下解决方法:

wb.active = 0

更新至 2.4.2,最后更改如下: workbook.py 删除活动 sheet 时正常失败。