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
...
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 maintenantws.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
.