我想知道是否有人知道如何在Google App Engine for Python中使用xlsxwriter。该文档仅展示了如何打开、写入和保存文件。我已经研究过在其他Excel库中使用StringIO的变通方法,但它们似乎不能移植到xlsxwriter。主要原因似乎是在其他库中可以提供StringIO缓冲区,而在xlsxwriter中只能提供文件名的字符串。
我已经有了一个使用pyexcelerator的基本解决方案,但是xlsxwriter的功能非常丰富,所以如果可能的话,我想使用它。
发布于 2019-07-23 21:45:02
我最近使用python和xlsxwriter在App Engine上开发了一个项目。我遇到了类似的问题,我找到了一种更好的解决方法,它不需要额外的代码,并且可以在本地系统上运行。
我们可以使用tmp environment -,App Engine中的一个运行时文件系统,它存在于请求/任务队列的生命周期中。
在创建写入器对象时,通过如下所示的/tmp/file,
writer = pd.ExcelWriter('/tmp/my_file.xlsx', engine='xlsxwriter')
#
# perform your operations
#
writer.save()在随后的代码中,您可以读取相同的文件并执行所需的操作,如通过邮件发送或上传,如...
file_path = '/tmp/'+ filename
with open(file_path, 'rb') as f:
my_file_data = f.read()
f.close()发布于 2013-06-11 04:34:43
更新:issue已由xlsxwriter作者修复(自0.4.8版本起生效)。请参阅example。
根据我在this thread中的回答,以下是在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无论如何都会尝试使用tempfile.tempdir写入临时目录,所以请参见source of _store_workbook方法。而且,GAE不允许在项目中使用tempfile模块:请参阅source,因为如您所知,无法访问那里的磁盘。
所以,这是一个“恶性循环”。也许您应该考虑修改_store_workbook方法,使其完全在内存中工作。或者,您可以动态地mock tempfile.tempdir调用,并将其替换为您自己的内存中对象。
另一个选择是在xlsxwriter issue tracker上创建一个问题,我打赌@jmcnamara在这个问题上有一些很好的想法。
希望这能有所帮助。
https://stackoverflow.com/questions/17014055
复制相似问题