多个openpyxl xlsx工作簿分成一个.zip文件供下载

时间:2017-11-18 12:42:51

标签: django openpyxl zipfile

我正在尝试从表单中获取一些xlsx文件,我使用openpyxl加载它们并进行一些数据处理..最后我需要将所有处理过的xlsx文件下载到用户。

这是我到目前为止所做的一个例子

if form.is_valid():

    s = StringIO.StringIO()
    zf = zipfile.ZipFile(s, mode="w")

    for xlsx in request.FILES.getlist('xlsxs'):

        element_column = "G"
        element_row = 16

        massar_column = "C"
        massar_row_start = 18

        loop = column_index_from_string(element_column)
        while (loop <= ws.max_column):
            for i in range(massar_row_start, ws.max_row+1):
                # ...
                ws["%s%s" % (element_column,i)] = 0
                # ...

            loop+=2
            element_column = get_column_letter(loop)

        buf = save_virtual_workbook(wb)
        zf.write(buf) # or zf.write(wb)

    zf.close()
    response = HttpResponse(s.getvalue(), content_type="application/x-zip-compressed")
    response['Content-Disposition'] = "attachment; filename=notes.zip"
    return response

我收到错误

TypeError at My_view
stat() argument 1 must be encoded string without null bytes, not str

提前感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

save_virtual_workbook返回字节流 - source

您将此值传递给期望文件名的ZipFile.write

我认为您应该使用ZipFile.writestr,并且需要提供将在存档中使用的文件名。我不确定你是如何得到你看到的错误信息,但这是我能看到的第一个错误。