python 3.5 -> 3.6 Tablib TypeError: cell() отсутствует 1 обязательный позиционный аргумент: 'column'
При переходе с python 3.5 на 3.6 мои модульные тесты выявили проблему с django-import-export & tablib:
TypeError: cell () отсутствует 1 обязательный позиционный аргумент: 'column'
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'
Строка в таблице:
cell = ws.cell('%s%s' % (col_idx, row_number))
Так что, действительно, нет никаких аргументов в пользу колонки
Код моего просмотра:
my_resource = MyModelResource(queryset=my_queryset)
dataset = my_resource.export()
response = HttpResponse(dataset.xlsx, content_type='application/vnd.ms-excel')
Это прекрасно работает в python3.5, но не работает под 3.6
requirements.txt:
...
tablib==0.12.1
django-import-export==0.7.0
Django==1.11.7
...
1 ответ
Это не имеет ничего общего с Python 3.5 или 3.6. У вас есть новее openpyxl
версия установлена с вашей версией 3.6 по сравнению с вашей установкой 3.5.
Версия, которую вы установили с 3.6, удалила устаревший параметр координат из worksheet.cell()
метод и сделал row
а также column
обязательные аргументы. Это часть версии 2.5.0b1, выпущенной 2018-01-19 (две недели назад):
Большие перемены
worksheet.cell()
больше не принимает параметр координат. Синтаксис сейчасws.cell(row, column, value=None)
tablib
Библиотека еще не приспособлена к этому изменению. Код должен просто передать номера столбцов и строк напрямую:
cell = ws.cell(row=row_number, column=col_idx)
Использование аргументов ключевого слова обеспечит совместимость вплоть до 1.1.0 (релиз, в котором добавлена поддержка column
а также row
параметры, выпущенные в 2010 году).
В то же время, вы можете понизить openpyxl
установка до версии 2.4.9, последняя версия без этих изменений.
Также смотрите выпуск № 324 в tablib
хранилище проекта.