web-dev-qa-db-fra.com

python 3.5 -> 3.6 Tablib TypeError: cellule () manque 1 argument positionnel requis: 'colonne'

Migration de python 3.5 à 3.6, mes tests unitaires révèlent un problème avec Django-import-export & tablib:

TypeError: cellule () manquante 1 argument positionnel requis: 'colonne'

File "<path>/lib/python3.6/site-packages/tablib/formats/_xlsx.py", line 122, in dset_sheet
    cell = ws.cell('%s%s' % (col_idx, row_number))
    TypeError: cell() missing 1 required positional argument: 'column'

La ligne en tablib:

    cell = ws.cell('%s%s' % (col_idx, row_number))

Donc, en effet, il n'y a pas d'argument pour la colonne

Mon code d'affichage:

my_resource = MyModelResource(queryset=my_queryset)
dataset = my_resource.export()
response = HttpResponse(dataset.xlsx, content_type='application/vnd.ms-Excel')

Cela fonctionne bien en python3.5 mais échoue sous 3.6

requirements.txt:

...
tablib==0.12.1
Django-import-export==0.7.0
Django==1.11.7
...
11
Davy

Cela n'a rien à voir avec Python 3.5 ou 3.6. Vous avez une version plus récente openpyxl installée avec votre installation 3.6 par rapport à votre configuration 3.5.

La version que vous avez installée avec 3.6 a supprimé le paramètre de coordonnées déconseillé de la méthode worksheet.cell() et - fait les row et column arguments obligatoires . Cela fait partie de version 2.5.0b1 , publié le 2018-01-19 (il y a deux semaines):

Changements majeurs

worksheet.cell() n'accepte plus un paramètre de coordonnées. La syntaxe est maintenant ws.cell(row, column, value=None)

La bibliothèque tablib ne s'est pas encore adaptée à cette modification. Le code doit simplement passer directement les numéros de colonne et de ligne:

cell = ws.cell(row=row_number, column=col_idx)

L'utilisation d'arguments de mots clés garantirait la compatibilité jusqu'à 1.1.0 (la version qui ajoutait la prise en charge des paramètres column et row, publiée en 2010).

En attendant, vous pouvez rétrograder votre installation openpyxl vers la version 2.4.9, la dernière version sans ces modifications.

Voir aussi problème # 324 dans le référentiel de projet tablib.

32
Martijn Pieters