4 votes

Impossible d'enregistrer un classeur après avoir supprimé des feuilles - openpyxl

Je manipule une feuille, principalement en supprimant toutes les feuilles sauf celle dont j'ai besoin. Je vais parcourir en boucle toutes les feuilles, et supprimer celles qui ne sont pas utiles à ma tâche.

Après avoir supprimé, j'ai essayé de sauvegarder mais une erreur s'est produite.

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

Voici mon script

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

Après avoir supprimé, j'ai vérifié le classeur. Et il contient la feuille que je recherche. Mais je ne sais pas pourquoi il ne détecte pas la feuille restante.

Pour ajouter plus de détails, le fichier Excel comporte 8 feuilles, la feuille que je recherche se trouve sur la 5e feuille.

2voto

gms Points 168

Pour moi, cela fonctionne avec la version 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')

Essayez-le simplement pour voir si ça marche. Vous pouvez également utiliser le workbook.sheetnames pour voir les noms des feuilles :

for sheet in workbook.sheetnames:
    print(sheet)

1voto

E. Pratt Points 49

Wb.remove_sheet() est déprécié par rapport à la version officielle de la norme documentation . Je ne peux pas encore commenter, mais obtenez-vous la même erreur en utilisant wb.remove() ?

1voto

stovfl Points 7200

Avant de sauvegarder, vous pouvez utiliser comme solution de rechange :

wb.active = 0

Mise à jour vers 2.4.2, la dernière modification est la suivante : workbook.py S'interrompt gracieusement lorsque la feuille active est supprimée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X