python 3.5 -> 3.6 Tablib 类型错误:cell() 缺少 1 个必需的位置参数:'column'



从python 3.5迁移到3.6,我的单元测试揭示了django-import-export和tablib的问题:

类型错误:单元格()缺少 1 个必需的位置参数:"列">

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 下失败

要求.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 中安装的版本已从方法中删除了已弃用的坐标参数worksheet.cell()并创建了rowcolumn必需参数。这是版本 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(2010 年发布的增加了对columnrow参数的支持的版本)。

同时,您可以将openpyxl安装降级到版本 2.4.9,这是没有这些更改的最新版本。

另请参阅tablib项目存储库中的问题 #324。

最新更新