Saltar al contenido

¿Puedo insertar gráficos matplotlib en Excel mediante programación?

No olvides que en las ciencias un error suele tener más de una resoluciones, así que aquí mostraremos la mejor y más eficiente.

Solución:

Esto es lo que encontré en dos enlaces diferentes en la web, que funcionó perfectamente para mí. Matplotlib permite guardar archivos png, que es lo que uso aquí:

from PIL import Image

file_in = "image.png"
img = Image.open(file_in)
file_out = 'test1.bmp'
print len(img.split()) # test
if len(img.split()) == 4:
    # prevent IOError: cannot write mode RGBA as BMP
    r, g, b, a = img.split()
    img = Image.merge("RGB", (r, g, b))
    img.save(file_out)
else:
    img.save(file_out)

from xlwt import Workbook
w = Workbook()
ws = w.add_sheet('Image')
ws.insert_bitmap(file_out, 0, 0)
w.save('images.xls')

La parte de la imagen del código es de la respuesta de Ene Uran aquí http://www.daniweb.com/software-development/python/threads/253957/converting-an-image-file-png-to-a-bitmap-file.

El xlwt es simplemente la documentación de xlwt que encontré en http://www.simplistix.co.uk/presentations/python-excel.pdf.

¡Openpyxl en realidad admite la incrustación de imágenes y podría funcionar mejor para aquellos que usan archivos .png o .xlsx existentes! El siguiente código agrega una imagen a la celda A1 de input.xlsx y guarda el archivo como output.xlsx.

import matplotlib.pyplot as plt
import openpyxl

# Your plot generation code here...
plt.savefig("myplot.png", dpi = 150)

wb = openpyxl.load_workbook('input.xlsx')
ws = wb.active

img = openpyxl.drawing.Image('myplot.png')
img.anchor(ws.cell('A1'))

ws.add_image(img)
wb.save('output.xlsx')

EDITAR junio de 2020: Me han informado que openpyxl ha cambiado desde el momento de escribir este artículo. La línea 7 debe ser:

img = openpyxl.drawing.image.Image('myplot.png')

Hay una .imagen adicional allí ahora.

Esto funcionó para mí:

import openpyxl

wb = openpyxl.load_workbook('input.xlsx')
ws = wb.active

img = openpyxl.drawing.image.Image('myplot.png')
ws.add_image(ws.cell('A1'))

ws.save('output.xlsx')

Si sostienes alguna perplejidad y forma de prosperar nuestro post te mencionamos dejar un informe y con placer lo interpretaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *