Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Google App Engine for Python中使用xlsxwriter_Python_Google App Engine_Xlsxwriter - Fatal编程技术网

在Google App Engine for Python中使用xlsxwriter

在Google App Engine for Python中使用xlsxwriter,python,google-app-engine,xlsxwriter,Python,Google App Engine,Xlsxwriter,我想知道是否有人知道如何在Google App Engine for Python中使用xlsxwriter。文档仅显示如何打开、写入和保存文件。我已经研究过在其他Excel库中使用StringIO的变通方法,但它们似乎不适用于xlsxwriter。主要原因似乎是,在其他库中,您可以提供StringIO缓冲区,而在xlsxwriter中,您只能为文件名提供字符串 我有一个使用pyexcelerator的基本解决方案,但是xlsxwriter的功能非常丰富,如果可能的话,我想使用它 UPD:xls

我想知道是否有人知道如何在Google App Engine for Python中使用xlsxwriter。文档仅显示如何打开、写入和保存文件。我已经研究过在其他Excel库中使用StringIO的变通方法,但它们似乎不适用于xlsxwriter。主要原因似乎是,在其他库中,您可以提供StringIO缓冲区,而在xlsxwriter中,您只能为文件名提供字符串

我有一个使用pyexcelerator的基本解决方案,但是xlsxwriter的功能非常丰富,如果可能的话,我想使用它

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.temporary文件可供使用

由于
xlsxwriter
尝试使用
tempfile.tempdir
写入临时目录,请参阅
\u store\u工作簿的
方法。而且,GAE不允许在项目中使用
tempfile
模块:请参阅,因为您知道,无法访问那里的磁盘

所以,这里有一个“恶性循环”。也许您应该考虑修改
\u store\u workbook
方法,使其完全在内存中工作。或者,您可以动态调用
mock
tempfile.tempdir
并用自己的内存对象替换它

另一个选择是在
xlsxwriter
上创建一个问题,我打赌@jmcnamara在这个问题上有一些好的想法


希望能有所帮助。

我最近使用python和xlsxwriter开发了一个关于应用程序引擎的项目。 我面临一个类似的问题,我发现了一个更好的解决方案,它不需要额外的代码,可以在本地系统上运行

我们可以使用-运行时文件系统应用程序内引擎,它存在于请求/任务队列的生命周期中

创建writer对象时,传递
/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()

您是否看到:仅供参考,这在Google App Engine上不起作用,因为它的xlsxwriter尝试将内容保存到临时目录。更新:xlsxwriter的版本>=0.4.8适用于Google App Engine。看,谢谢。当我决定在这里发帖时,我实际上开始进入tempfile.tempdir兔洞。我肯定会向他们的问题追踪器提交一些东西。要解决NotImplementedError,请在Api()创建期间将cache参数设置为None,它将禁用默认的基于文件的缓存。