es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Guardando un archivo de Excel de varias hojas en Azure Blob Storage utilizando Pandas en Python.

Estoy intentando crear dos hojas en un archivo de Excel y luego subirlo a Azure Blob Storage utilizando Pandas en Python. Sin embargo, obtengo un error: “No se puede obtener .getvalue() del objeto ‘OpenpyxlWriter’ new_writer”.

blob_client = blob_service_client.get_blob_client(container=new_container_name, blob=file_name)

writer = io.BytesIO()

summary = pd.DataFrame({"one_val": [1, 2]})
summary.to_excel(writer, sheet_name="Hoja A", index=False)
blob_client.upload_blob(writer.getvalue(), overwrite=True)

writer = io.BytesIO()
summary2 = pd.DataFrame({"two_val": [3, 4]})

with pd.ExcelWriter(writer, engine="openpyxl", mode="a") as new_writer:
    summary2.to_excel(new_writer, sheet_name="Hoja B", index=False, encoding="utf-8")
    blob_client.upload_blob(new_writer.getvalue(), blob_type="AppendBlob", overwrite=False)

Cualquier ayuda con respecto a una solución para este problema es apreciada. Gracias.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el error ocurre al intentar obtener el valor del objeto new_writer usando .getvalue(). En lugar de pasar new_writer directamente al método upload_blob, debes pasarle el objeto BytesIO que estás utilizando para escribir en new_writer. El código actualizado debería verse así:

    blob_client = blob_service_client.get_blob_client(container=new_container_name, blob=file_name)
    
    writer = io.BytesIO()
    summary = pd.DataFrame({"one_val": [1, 2]})
    summary.to_excel(writer, sheet_name="Hoja A", index=False)
    blob_client.upload_blob(writer.getvalue(), overwrite=True)
    
    writer = io.BytesIO()
    summary2 = pd.DataFrame({"two_val": [3, 4]})
    
    with pd.ExcelWriter(writer, engine="openpyxl", mode="a") as new_writer:
        summary2.to_excel(new_writer, sheet_name="Hoja B", index=False, encoding="utf-8")
    
    blob_client.upload_blob(writer.getvalue(), blob_type="AppendBlob", overwrite=False)
    

    Nota que ahora estamos llamando a upload_blob con writer.getvalue() en lugar de new_writer.getvalue().

Comments are closed.