使用 tablib 和 django-import-export 导入数据,excel 出现错误,但使用 csv 可以正常工作

using tablib and django-import-export to import data, getting error with excel, but with csv it's working

首先尝试读取 excel/csv 数据以在插入数据库之前对其进行检查, 虽然 csv 工作正常可以读取数据,但 xlsx 和 xlx 显示以下错误

UnicodeDecodeError at /academy/add_advisor 'utf-8' codec can't decode byte 0xa1 in position 10: invalid start byte

我的代码片段:

from tablib import Dataset
this_file = request.FILES['bulk_file']

dataset = Dataset()
imported_data = dataset.load(this_file.read().decode("utf-8"),format='xlsx')

for data in dataset:
    print(data[0], data[1], data[2], data[3], data[4])

根据来自此行的错误消息错误

imported_data = dataset.load(this_file.read().decode("utf-8"),format='xlsx')

我正在尝试导入的 excel 文件,我从 google 驱动器 excel 下载它作为 xlsx 文件(微软 excel)。还从 onedrive(microsoft) 下载了一个 xlsx 文件仍然出现同样的错误。

我尝试过的其他方法有

imported_data = dataset.load(this_file.read().decode("ISO-8859-1"),format='xlsx')
imported_data = dataset.load(this_file.read().strip().decode("ISO-8859-1"),format='xlsx')
imported_data = dataset.load(this_file.read().strip().decode("CP1252"),format='xlsx')
imported_data = dataset.load(this_file.read().strip().decode("windows-1252"),format='xlsx')
imported_data = dataset.load(this_file.read().strip().decode("Latin-1"),format='xlsx')

但运气不好:( 如果我有更好的方法可以尝试,请分享:)(: 感谢您阅读 :)

好吧,如果您的 the_file 是一个 .xlsx 文件,那么手动 解码 流可能不是一个好主意:一个 .xlsx 是 XML 文件的 压缩 流。所以这意味着它并没有真正遵循标准的字符串编码。

但是 dataset.load(..) 也表明它并不需要一个字符串,它需要它旨在加载的数据。如果是.xlsx文件,即binary数据,那么我们可以使用.read()将文件内容读入二进制字符串,从而让dataset 进行正确的处理,例如:

imported_data = dataset.load(this_file.read(),format='xlsx')