如何将Openpyxl生成的xlsx输出到浏览器?

see*_*bek 6 python browser excel cgi openpyxl

我现在使用stackoverflow一段时间了,它经常帮助我.现在我有一个问题,我无法解决自己或通过搜索.我正在尝试在浏览器中输出由openpyxl生成的excel文件,就像我使用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)
Run Code Online (Sandbox Code Playgroud)

我使用版本1.5.8和python 2.7.这些方法都不起作用.当我从桌面使用它而不是浏览器时,它可以完美地运行.我非常感谢你的帮助.

PS请不要告诉我使用其他语言或程序会更容易.我需要用python来解决这个问题.

Jin*_*ing 5

这对我有用.我使用python 2.7和最新的openpyxlsend_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)
Run Code Online (Sandbox Code Playgroud)

  • 这是一个可怕的走样!`from io import BytesIO`就是这样做的方法. (2认同)

小智 1

将 xlsx 输出写入磁盘,然后通过 Apache 提供它,效果非常好,但直接将其输出会导致 Excel 中出现错误和其他问题。

我添加了几个额外的步骤并对您的代码做了一个小更改:

buffer=output.getvalue()
Run Code Online (Sandbox Code Playgroud)

在 HTTP 标头中:

print "Content-Length: " + str(len(buffer))
Run Code Online (Sandbox Code Playgroud)

并使用write()而不是print()将缓冲区推入标准输出流:

stdout.write(buffer)
Run Code Online (Sandbox Code Playgroud)