从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'
tablib中的行:
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
...
最佳答案
这与Python 3.5或3.6无关。与3.5设置相比,在3.6安装中安装了较新的openpyxl
版本。
与3.6一起安装的版本具有removed the deprecated coordinate parameter from worksheet.cell()
method和made the row
and column
mandatory arguments。这是version 2.5.0b1的一部分,它于2018年1月19日发布(两周前):
tablib
库尚未适应此更改。该代码应直接传递列号和行号:
cell = ws.cell(row=row_number, column=col_idx)
使用关键字参数将确保一直到1.1.0(该版本增加了对
column
和row
参数的支持的版本,于2010年发行)的兼容性。同时,您可以将
openpyxl
安装降级为版本2.4.9,这是没有这些更改的最新版本。另请参阅
tablib
项目存储库中的issue #324。关于python 3.5-> 3.6 Tablib TypeError : cell() missing 1 required positional argument: 'column' ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48598092/