как вывести xlsx, сгенерированный Openpyxl в браузер?

Некоторое время назад я использовал stackoverflow, и это мне очень часто помогало. Теперь у меня есть проблема, которую я не могрешить сам или через поиск. Я'я пытаюсь вывести мой файл Excel, сгенерированный openpyxl в браузере, как я делал это с phpexcel. Метод выглядит так же, но я получаю только испорченный файл. Мой код выглядит так:

from openpyxl.workbook import Workbook
from openpyxl.writer.excel import ExcelWriter
from openpyxl.writer.excel import save_virtual_workbook
from openpyxl.cell import get_column_letter
from StringIO import StringIO

print 'Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
print 'Content-Disposition: attachment;filename="results.xlsx"'
print 'Cache-Control: max-age=0\n'

output = StringIO()

wb = Workbook()

ws = wb.worksheets[0]

ws.cell('A1').value = 3.14

wb.save(output)
print output.getvalue()
#print save_virtual_workbook(wb)

Я использую версию 1.5.8 и python 2.7. Ни один из подходов не работает. Когда я просто использую его с рабочего стола, а не из браузера, он работает без нареканий. Я был бы очень благодарен за помощь.

Постскриптум пожалуйста, не'Скажи мне, что с использованием другого языка или программы будет проще. Мне нужно решить это с помощью Python.

Ответы на вопрос(6)

Если вы хотите создать таблицу HTML, которая выглядит как ваша электронная таблица, вы, вероятно, хотите работать с CSV. Либо сделайте это вместо Excel, ИЛИ конвертируйте ваш Excel в CSV после его сборки.

В любом случае, если у вас есть данные в формате CSV, тогдаЭто просто вопрос использования Python для создания HTML-страницы и циклического прохождения данных CSV при вставке вашего,, а также теги, при необходимости.

Ваши сценарии работают для меня, как вы ожидаете, без изменений.

Я могу только предположить, что у вас есть проблемы с настройкой скрипта cgi.

Убедитесь, что у вас есть каталог, в котором находится скрипт, который фактически обслуживается веб-сервером. На Apache вы можете добиться этого с:

  ScriptAlias /cgi-bin/ /home/WWW/localhost/cgi-bin/

Убедитесь, что сценарий является исполняемым, установив разрешения для сценария. Для командной строки (python scriptname) это не было необходимо для вашего веб-браузера. И убедитесь, что владелец веб-сервера может выполнять сценарии, поскольку веб-сервер, вероятно, работает не так, как вы.

output = HttpResponse(mimetype='application/application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
file_name = "Test.xlsx"
output['Content-Disposition'] = 'attachment; filename='+ file_name

wb = Workbook()

ws = wb.worksheets[0]

ws.cell('A1').value = 3.14

wb.save(output)

return output

Я использовал эти советы, чтобы загрузить мои файлы с openpyxl. Надеюсь, что это поможет

это работа для меня. я используюpython 2.7 и последнийopenpyxl а такжеsend_file из колбы

... code ...

import StringIO
from openpyxl import Workbook
wb = Workbook()
ws = wb.active # worksheet
ws.title = "Excel Using Openpyxl"
c = ws.cell(row=5, column=5)
c.value = "Hi on 5,5"
out = StringIO.StringIO()
wb.save(out)
out.seek(0)

return send_file(out, mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
            attachment_filename='xxl.xlsx', as_attachment=True)

Запись выходных данных xlsx на диск и последующая их обработка через Apache работали отлично, но их непосредственное появление вызывало ошибки в Excel и другие проблемы.

Я добавил пару дополнительных шагов и сделал одно небольшое изменение в вашем коде:

buffer=output.getvalue()

В заголовках HTTP:

print "Content-Length: " + str(len(buffer))

И использовалwrite() вместоprint() вставить буфер в стандартный поток вывода:

stdout.write(buffer)

Поскольку Excel использует двоичный формат, вы должны использовать BytesIO для буферизации.

from io import BytesIO

Но какую ошибку вы получаете, если вы используетеsave_virtual_workbook() что делает это для вас?

ВАШ ОТВЕТ НА ВОПРОС