可以通过编程将matplotlib图表插入Excel吗?

16 投票
4 回答
53838 浏览
提问于 2025-04-17 17:42

我正在把matplotlib生成的文件保存为.tiff格式的图片。我希望能把这些图片打开后粘贴到Excel文件里。

不过,openpyxl似乎不支持直接把图片嵌入到Excel里,而xlwt可以,但它只支持bmp格式。

另外,如果我能通过编程把tiff格式转换成bmp格式,那也许会有帮助。

对这两种方法的想法都很欢迎。

这和下面这个问题类似:

如何通过编程把多个jpeg图片嵌入到Excel中?

不过,因为我每个文件的图表数量不多(大约10个),所以把tiff转换成bmp也是可以接受的。

4 个回答

4

这个对我来说有效:

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')
12

Openpyxl其实是支持嵌入图片的,对于使用.png格式或者已经存在的.xlsx文件的人来说,效果可能会更好!下面的代码会把一张图片添加到input.xlsx文件的A1单元格,并将文件保存为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.Image('myplot.png')
img.anchor(ws.cell('A1'))

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

更新 2023:看起来人们在将近7年后仍然在阅读这个内容!我已经更新了原始代码的第7行,以便那些复制粘贴的人可以使用最新的内容。

更新 2020年6月:我被告知openpyxl自我写这篇文章以来发生了变化。第7行的代码已经从:

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

改为:

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

现在多了一个.image。

9

我在网上找到的两个不同链接的信息,对我来说效果很好。Matplotlib可以保存png格式的文件,我在这里正是用到了这一点:

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')

代码中的图像部分来自Ene Urans在这里的回答:http://www.daniweb.com/software-development/python/threads/253957/converting-an-image-file-png-to-a-bitmap-file

而xlwt的部分则是我在这里找到的xlwt的文档:http://www.simplistix.co.uk/presentations/python-excel.pdf

撰写回答