【问题标题】:Can't save a workbook after deleting sheets - openpyxl删除工作表后无法保存工作簿-openpyxl
【发布时间】:2017-02-14 02:01:30
【问题描述】:

我正在处理一张工作表,主要是删除除我需要的那张之外的所有工作表。我将遍历所有工作表,并删除对我的任务无用的工作表。

删除后,我尝试保存,但报错。

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")

删除后,我检查了工作簿。它有我要找的工作表。只是不确定为什么它没有检测到剩余的 1 张。

要添加更多细节,excel文件有8张,我之后的那张在第5张。

【问题讨论】:

标签: python openpyxl


【解决方案1】:

对我来说,这适用于 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)

【讨论】:

  • test.xlsx 上有多少张纸?我尝试创建一个包含 5 张纸的测试文件,但遇到了同样的错误
  • 我有 12 张。它适用于workbook.remove_sheet(i)workbook.remove(i),就像 Eric Pratt 所说的那样。我在 Windows 7 和 Python 3.6 和 Arch Linux 上使用 openpyxl 版本 2.4.2 和 Python 3.5.1 进行了尝试
  • 这是版本问题,已在 2.4.2 中修复。感谢您的回答
【解决方案2】:

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

【讨论】:

  • 很遗憾,是的,埃里克。我仍然得到同样的错误。也尝试了 del wb[sheet] 语法,但还是一样
  • @niccolom。你用的是什么版本的openpyxl?
  • 我使用的是 anaconda 包下的 2.4.1
【解决方案3】:

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

wb.active = 0

更新到 2.4.2,最后更改如下: workbook.py 在删除活动工作表时正常失败。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2021-10-04
    相关资源
    最近更新 更多