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.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 も参照してください。