在 django 中上传和读取 xlsx 文件

Posted

技术标签:

【中文标题】在 django 中上传和读取 xlsx 文件【英文标题】:upload and read xlsx file in django 【发布时间】:2018-11-25 20:40:33 【问题描述】:

我第一次在 django 中使用 xlsx 文件。我正在尝试上传 xlsx 文件并将其数据存储在我的模型中。但是我的功能不起作用

这是我的观点.py

def upload(request,pk):
    if request.method == "POST":
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            filehandle = request.FILES.get('myfile',False)
            workbook = xlrd.open_workbook(filehandle)
            worksheet = workbook.sheet_by_index(0)
            rows = []

            for column in range(worksheet.nrows):
                for row in range(worksheet.nrows):
                    rows.append(worksheet.cell(row, column).value)
                for i in range(0,len(rows)):
                    if i==0:
                        prodatt = ProductAttribute.objects.get_or_create(name=rows[i],slug=rows[i])
                        prodatt.save()
                        rows[0]=prodatt.pk
                    elif i>=2:
                        attval = AttributeChoiceValue.objects.get_or_create(name=rows[i],slug=rows[i],attribute=rows[0])
                        print(attval)
                        attval.save()
            for i,row in range(worksheet.nrows):
                if i>1:
                    for j in row:
                        if j>0:
                            a=AttributeChoiceValue.objects.get(name=row[j]).pk
                            d=li[j-1]:a
                            d1=**d

                    prod = Product.objects.get_or_create(name=row[0],attributes=d1,product_type=pk)
                    print(prod)
                    prod.save()
                elif i==0:
                    li=[]
                    for j in row:
                        if j>0:
                            li.append(row[j])

        workbook.close()
        return render(request,'dashboard/list.html')

我的 forms.py 有

class UploadFileForm(forms.Form):
    file = forms.FileField()

我的模板有

  <form method="post" enctype="multipart/form-data" action="%url 'dashboard:product-upload' pk=product_type.pk%">
           % csrf_token %
           up
           <button type="submit">Upload</button>
       </form>

【问题讨论】:

“它不工作”是什么意思?有什么错误吗?它应该在哪里表现不同? @Ralf 我的文件句柄是空的,即如果不是文件句柄:打印(“未收到文件”)输出:未收到文件 【参考方案1】:

我用过

workbook = xlrd.open_workbook(filehandle.temporary_file_path())

代替

workbook = xlrd.open_workbook(filehandle)

并添加了

FILE_UPLOAD_HANDLERS = (
    'django.core.files.uploadhandler.TemporaryFileUploadHandler',
)

在 settings.py 中,它起作用了

【讨论】:

我收到此错误'/tmp/tmp1054zpgw.upload.xlsx'

以上是关于在 django 中上传和读取 xlsx 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 csv.DictReader 在 django 中上传和读取 csv 文件?

PHPExcel - 读取下载的 xlsx 文件

在 JavaScript/SAPUI5 中读取 Excel (xlsx) 文件数据时出现问题

在Django中读取使用html表单上传的Excel文件

php上传excel文件,如何读取文件中的信息?

vue excel文件的导入读取和下载