2017-02-14 10 views
3

Ich manipuliere ein Blatt, hauptsächlich alle Blätter löschen, aber die, die ich brauche. Ich werde alle Blätter durchlaufen und die Blätter löschen, die für meine Aufgabe nicht nützlich sind.Kann keine Arbeitsmappe nach dem Löschen von Blättern speichern - openpyxl

Nach dem Löschen habe ich versucht zu speichern, aber es wirft einen Fehler.

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

Hier ist mein Skript

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

nach dem Löschen, ich die Arbeitsmappe geprüft. Und es hat das Blatt, nach dem ich suche. Nur nicht sicher, warum es das restliche 1 Blatt nicht erkennt.

Um weitere Details hinzuzufügen, hat die Excel-Datei 8 Blätter, das Blatt, nach dem ich bin, ist auf dem 5. Blatt.

+1

Klingt wie https://bitbucket.org/openpyxl/openpyxl/issues/748/ Bitte aktualisieren Sie Ihre Version von openpyxl. –

Antwort

2

Für mich ist mit 2.4.2-Version arbeiten:

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

Probieren Sie es einfach, wenn seine Arbeiten zu sehen. Sie können auch die workbook.sheetnames verwenden, um die sheetnames zu sehen:

for sheet in workbook.sheetnames: 
    print(sheet) 
+0

Wie viele Blätter hast du dort auf test.xlsx? Ich habe versucht, eine Testdatei mit 5 Blättern zu erstellen, und ich begegne dem gleichen Fehler –

+0

Ich habe 12 Blätter. Es arbeitet mit 'workbook.remove_sheet (i)' und mit 'workbook.remove (i)' wie Eric Pratt erzählte. Ich versuchte es mit openpyxl Version 2.4.2 und Python 3.5.1 mit Windows 7 und Python 3.6 und Arch Linux – gms

+0

das war ein Versions-Problem, das in 2.4.2 behoben wurde. Danke für die Antwort –

1

wb.remove_sheet() ist vom offiziellen documentation veraltet. Ich kann noch nicht kommentieren, aber erhalten Sie den gleichen Fehler bei der Verwendung von wb.remove()?

+0

traurig, ja Eric. Ich bekomme immer noch den gleichen Fehler. versuchte die del wb [Blatt] -Syntax, aber immer noch das gleiche –

+0

@niccolom. Welche Version von openpyx benutzen Sie? –

+0

Ich benutze 2.4.1 wie unter dem Anaconda-Paket gesehen –

1

Vor dem Speichern können Sie als Abhilfe verwenden:

wb.active = 0 

Update auf 2.4.2, letzte Änderung lautet: Arbeitsmappe. py Fehler beim Löschen des aktiven Blattes.

Verwandte Themen