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来解决这个问题.
这对我有用.我使用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)
Run Code Online (Sandbox Code Playgroud)
小智 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)