11

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

类型错误: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 下失败

要求.txt:

...
tablib==0.12.1
django-import-export==0.7.0
Django==1.11.7
...
4

1 回答 1

33

这与 Python 3.5 或 3.6 无关。openpyxl与 3.5 安装相比,您在 3.6 安装中安装了更新的版本。

您使用 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 的兼容性(该版本增加了对columnandrow参数的支持,于 2010 年发布)。

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

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

于 2018-02-03T13:59:06.263 回答