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

Dav*_*avy 11 python django django-import-export python-3.6 tablib

从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'
Run Code Online (Sandbox Code Playgroud)

tablib中的行:

    cell = ws.cell('%s%s' % (col_idx, row_number))
Run Code Online (Sandbox Code Playgroud)

事实上,该专栏没有任何论据

我的观点代码:

my_resource = MyModelResource(queryset=my_queryset)
dataset = my_resource.export()
response = HttpResponse(dataset.xlsx, content_type='application/vnd.ms-excel')
Run Code Online (Sandbox Code Playgroud)

这在python3.5中工作正常但在3.6下失败

requirements.txt:

...
tablib==0.12.1
django-import-export==0.7.0
Django==1.11.7
...
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 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)
Run Code Online (Sandbox Code Playgroud)

使用关键字参数将确保兼容性一直回到1.1.0(添加了对2010 columnrow2010年发布的参数的支持).

在此期间,您可以将openpyxl安装降级到版本2.4.9,即没有这些更改的最后一个版本.

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

  • 很好的答案.将openspyxl == 2.4.9添加到requirements.txt文件确实解决了这个问题. (4认同)