Я пытаюсь получить некоторые файлы 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

Заранее благодарим за любую помощь, которую вы можете предложить.

0
ppp0h 18 Ноя 2017 в 15:42

1 ответ

Лучший ответ

save_virtual_workbook возвращает байтовый поток - источник.

Вы передаете это значение в ZipFile.write, который ожидает имя файла.

Я думаю, вам следует использовать ZipFile.writestr, и вам необходимо указать имя файла, которое будет использоваться внутри архива. Я не уверен, как вы получаете сообщение об ошибке, но это первая ошибка, которую я вижу.

0
spookylukey 18 Ноя 2017 в 17:55