4

django-import-export ライブラリを使用して、いくつかの Excel ブックをインポートしています。ただし、データベースにインポートする必要がある本が 1,000 冊以上あります。個々のファイルを選択してアップロードする代わりに、アップロードするフォルダを選択する方法はありますか? https://django-import-export.readthedocs.org/en/latest/getting_started.html#admin-integrationにあるチュートリアルに取り組みました が、質問に対する答えが見つかりませんでした。

どんな助けでも大歓迎です。

4

1 に答える 1

1

主に将来の閲覧者向けに投稿します。現在、django_import_export単一の Excel ワークブックのアクティブ/最初のシートのみをインポートします。ただし、コードを変更してこの問題を軽減するのは簡単です。forms.pyには、ImportFormadmin からのインポート時に使用されるものがあります。import_fileフィールドを次のように変更するだけです。

import_file = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': 
                             True}),
                             label=_('File to import')
                             )

このフォームは、admin.pyでファイル データを処理するために使用されます。リンクされた行を次のように変更します。

import_files = request.FILES.getlist('import_file')
for import_file in import_files:
    ...

あとは、 base_formats.pyのインポート手順をXLSおよびXLSX形式に変更するだけです。変更内容はどちらもほぼ同じXLSです。ここでは概要を説明します。

最初のシートを取得する代わりに、シートに対してforループを実行し、データをデータセットに追加します。

dataset = tablib.Dataset()
first_sheet = True    # If you keep all correct headers only in first sheet
for sheet in xls_book.sheets():
    if first_sheet:
        dataset.headers = sheet.row_values(0)
    first_sheet = False
    for i in moves.range(1, sheet.nrows):
        dataset.append(sheet.row_values(i))
return dataset

XLSX の場合、ループは で実行されxlsx_book.worksheetsます。レストは に似ていxlsます。

これにより、複数の Excel ワークブックを選択して、ワークブックのすべてのシートをインポートできます。理想的な解決策は、zipファイルをインポートして単一の を使用してすべてのデータを作成することですbulk_createが、今のところはこれで十分です。

于 2019-03-10T15:18:04.833 に答える