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

时间:2017-02-14 02:01:30

标签: python openpyxl

我正在操作一张纸,主要是删除所有纸张而不是我需要的纸张。我将遍历所有工作表,并删除对我的任务无用的工作表。

删除后,我尝试保存,但它会抛出错误。

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张纸上。

3 个答案:

答案 0 :(得分:2)

对我而言,这适用于2.4.2版本:

f = open ('original_file', 'rb')
f.seek(1000000)
rest = f.read()
f.close()
f1 = open('new_file', 'w')
f1.write(rest)
f1.close()

尝试一下,看它是否有效。 您还可以使用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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

保存之前,您可以将其用作解决方法:

wb.active = 0

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