UPD:该问题已由 xlsxwriter 作者修复(从 0.4.8 版本开始工作)。请参阅示例。
依靠我在这个线程中的回答,以下是 GAE 应该工作的内容:
from xlsxwriter.workbook import Workbook
class IndexHandler(webapp2.RequestHandler):
def get(self):
book = Workbook(self.response.out)
sheet = book.add_worksheet('test')
sheet.write(0, 0, 'Hello, world!')
book.close()
# construct response
self.response.headers['Content-Type'] = 'application/ms-excel'
self.response.headers['Content-Transfer-Encoding'] = 'Binary'
self.response.headers['Content-disposition'] = 'attachment; filename="workbook.xls"'
但是,它会引发错误:
NotImplementedError:只有 tempfile.TemporaryFile 可供使用
因为无论如何xlsxwriter
都会尝试写入临时目录,请参阅方法的来源。而且,GAE 不允许在项目中使用模块:请参阅source,因为如您所知,无法访问那里的磁盘。tempfile.tempdir
_store_workbook
tempfile
所以,这里出现了“恶性循环”。可能您应该考虑修改_store_workbook
方法以使其完全在内存中工作。或者,您可以mock
tempfile.tempdir
即时调用并将其替换为您自己的内存对象。
xlsxwriter
另一种选择是在问题跟踪器上创建一个问题,我敢打赌@jmcnamara 对此主题有一些好主意。
希望有帮助。