python - eyed3 - Guardando el archivo openpyxl vía texto y filestream
id3v2 4 python (3)
Estoy creando OpenPyXL en una aplicación que espera una cadena que contenga el contenido del archivo de Excel, para que pueda escribir a través del flujo de archivos.
Desde mi investigación sobre el código fuente de OpenPyXL, no parece que admita este tipo de salida. ¿Alguien tiene alguna experiencia con la modificación de openpyxl para admitir esto?
¿O algún consejo general / soluciones?
Gracias.
¿Qué pasa con el uso de un objeto StringIO
para guardar el contenido del archivo:
from openpyxl.workbook import Workbook
from StringIO import StringIO
output = StringIO()
wb = Workbook()
wb.save(output)
print output.getvalue()
La cadena que está buscando es lo que se está imprimiendo en la última línea de este ejemplo.
En openpyxl 2.6, llamar al método save_virtual_workbook
emite la siguiente advertencia:
DeprecationWarning: Call to deprecated function save_virtual_workbook (Use a NamedTemporaryFile).
En algún momento, save_virtual_workbook
se eliminará de openpyxl.
En Python 3, el uso típico para guardar un libro openpyxl en un flujo de archivos se convierte en:
from io import BytesIO
from tempfile import NamedTemporaryFile
from openpyxl import Workbook
wb = Workbook()
with NamedTemporaryFile() as tmp:
wb.save(tmp.name)
output = BytesIO(tmp.read())
La respuesta de jcollado es realmente válida, pero también hay una función (lamentablemente no documentada todavía) llamada "save_virtual_workbook" en openpyxl.writer.excel que tomará su libro de trabajo y lo devolverá como una cadena:
from openpyxl.workbook import Workbook
from openpyxl.writer.excel import save_virtual_workbook
wb = Workbook()
print save_virtual_workbook(wb)
Lo que estás buscando es la cadena devuelta por save_virtual_workbook ()