使用tablib和django-import-export导入数据,使用excel时遇到错误,但是使用CSV可以正常工作

时间:2018-08-01 09:15:10

标签: python django python-import django-import-export tablib

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

  

/ academy / add_advisor处的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文件,我从google drive excel下载了xlsx文件(microsoft 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')

但是没有运气:( 如果有更好的方法,请尝试分享:)(: 谢谢您的阅读:)

1 个答案:

答案 0 :(得分:1)

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

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

dataset