web-dev-qa-db-ja.com

python 3.5-> 3.6 Tablib TypeError:cell()missing 1 required Positional Argument: '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'

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
...
11
Davy

これは、Python 3.5または3.6とは関係ありません。3.6のインストールでは、3.5のセットアップと比較して、より新しいopenpyxlバージョンがインストールされています。

3.6でインストールしたバージョンには 廃止された座標パラメーターがworksheet.cell() method および-から削除されました rowおよびcolumn必須引数 を作成しました。これは、2018-01-19(2週間前)にリリースされた バージョン2.5.0b1 の一部です。

主な変更点

worksheet.cell()は座標パラメーターを受け入れなくなりました。構文はws.cell(row, column, value=None)になりました。

tablibライブラリはまだこの変更に対応していません。コードは、列と行の番号を直接渡す必要があります。

cell = ws.cell(row=row_number, column=col_idx)

キーワード引数を使用すると、1.1.0(2010年にリリースされたcolumnおよびrowパラメーターのサポートを追加したリリース)までの互換性が保証されます。

それまでの間、openpyxlインストールをバージョン2.4.9にダウングレードすることができます。これは、これらの変更のない最後のリリースです。

tablibプロジェクトリポジトリの issue#324 も参照してください。

32
Martijn Pieters