使用 tablib 和 django-import-export 导入数据,使用 Excel 时出错,但使用 CSV 它可以工作



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

/academ/add_advvisor上的UnicodeDecodeError"utf-8"编解码器无法解码位置10中的字节0xa1:起始字节无效

我的代码片段:

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文件,我从谷歌驱动器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文件的情况下,即二进制数据,因此我们可以使用.read()将文件的内容读取为二进制字符串,从而让dataset进行正确的处理,如:

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

最新更新