standard para google for engine docs descargar app python google-app-engine xlsxwriter

for - Usar xlsxwriter en Google App Engine para Python



google app engine python standard (1)

Me pregunto si alguien sabe cómo usar xlsxwriter en Google App Engine para Python. La documentación solo muestra cómo abrir, escribir y guardar en un archivo. He visto soluciones alternativas utilizando StringIO para otras bibliotecas de Excel, pero no parecen transferibles a xlsxwriter. La razón principal parece ser que en otras bibliotecas puede suministrar un búfer StringIO, mientras que en xlsxwriter solo puede proporcionar una cadena para el nombre del archivo.

Tengo una solución básica en el lugar usando pyexcelerator pero xlsxwriter es mucho más rico en características que me gustaría utilizar, si es posible.


UPD: el problema fue corregido por el autor xlsxwriter (funciona desde la versión 0.4.8). Mira el ejemplo .

Confiando en mi respuesta en este hilo , esto es lo que debería funcionar en 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"''

Pero, arroja un error:

NotImplementedError: solo tempfile.TemporaryFile está disponible para su uso

debido a que xlsxwriter intenta escribir en el directorio temporal usando tempfile.tempdir todos modos, vea el código fuente del método _store_workbook . Y, GAE no permite que se tempfile módulo tempfile en el proyecto: vea la fuente , porque, como usted sabe, no hay acceso al disco allí.

Entonces, un "círculo vicioso" aquí. Probablemente deberías pensar en modificar el método _store_workbook para que funcione completamente en la memoria. O bien, puede ser que se puede mock llamada de tempfile.tempdir sobre la marcha y reemplazarla con su propio objeto en memoria.

Otra opción es crear un problema en el xlsxwriter problemas xlsxwriter . Apuesto a que @jmcnamara tiene algunas buenas ideas sobre el tema.

Espero que ayude.