【发布时间】:2012-06-04 21:58:28
【问题描述】:
是否可以使用 openpyxl 插入图像(jpeg、png 等)?
基本上我想在其下方放置一个带有图表的生成图像。
文档里没看到任何东西,相比于代码的成熟度,似乎有点欠缺。
【问题讨论】:
是否可以使用 openpyxl 插入图像(jpeg、png 等)?
基本上我想在其下方放置一个带有图表的生成图像。
文档里没看到任何东西,相比于代码的成熟度,似乎有点欠缺。
【问题讨论】:
下面在单元格 A1 中插入一个图像。根据您的需要调整图像位置或自己处理 PIL 图像的创建并将其交给Image()
import openpyxl
wb = openpyxl.Workbook()
ws = wb.worksheets[0]
img = openpyxl.drawing.image.Image('test.jpg')
img.anchor = 'A1'
ws.add_image(img)
wb.save('out.xlsx')
在旧版本的 openpyxl 中,以下工作:
import openpyxl
wb = openpyxl.Workbook()
ws = wb.worksheets[0]
img = openpyxl.drawing.Image('test.jpg')
img.anchor(ws.cell('A1'))
ws.add_image(img)
wb.save('out.xlsx')
【讨论】:
openpyxl.drawing.Image 已移至:openpyxl.drawing.image.Image
img.anchor(ws.cell('A1')) 现在是 img.anchor = 'A1'
在当前版本的 openpyxl(至少到 2.4.5)中,您必须像这样调用 Image:
img = openpyxl.drawing.image.Image('test.jpg')
以 Anthon 为例:
import openpyxl
wb = openpyxl.Workbook()
ws = wb.worksheets[0]
img = openpyxl.drawing.image.Image('test.jpg')
img.anchor(ws.cell('A1'))
ws.add_image(img)
wb.save('out.xlsx')
【讨论】:
img.anchor(ws.cell('A1')) TypeError: cell() missing 1 required positional argument: 'column'
img.anchor = 'A1'
提供有关如何执行此操作的完整更新。此解决方案使用 openpyxl 版本 2.4.5。
我将一张图片下载到我的本地目录,打开了一个现有的工作簿并保存了插入的图片。
import openpyxl
from openpyxl import load_workbook
from openpyxl import Workbook
from openpyxl.drawing.image import Image
from openpyxl.utils import coordinate_from_string
openpyxl_version = openpyxl.__version__
print(openpyxl_version) #to see what version I'm running
# downloaded a .png to local directory manually from
# "https://www.python.org/static/opengraph-icon-200x200.png"
#change to the location and name of your image
png_loc = r'c:\users\me\opengraph-icon-200x200.png'
# test.xlsx already exists in my current directory
wb = load_workbook('test.xlsx')
ws = wb.active
my_png = openpyxl.drawing.image.Image(png_loc)
ws.add_image(my_png, 'B3')
wb.save('test.xlsx')
结果:
【讨论】:
DeprecationWarning: Call to deprecated function anchor (Anchors can be passed in when an image is added to a worksheet). 知道如何解决吗?
这段代码对我有用:
import openpyxl
wb = openpyxl.Workbook()
ws = wb.worksheets[0]
ws.merge_cells('A1:A3')
img = openpyxl.drawing.image.Image('image.jpg')
row_number = 1
col_idx = 1
cell = ws.cell(row=row_number, column=col_idx)
ws.add_image(img)
wb.save('output.xlsx')
【讨论】:
补充一下,我一直在使用 openpyxl==2.5.6(使用 Python3.65),我不得不使用 img.anchor('A1') 而不是 img.anchor(ws.cell('A1'))。
import openpyxl
wb = openpyxl.Workbook()
ws = wb.worksheets[0]
img = openpyxl.drawing.Image('test.jpg')
img.anchor('A1')
ws.add_image(img)
wb.save('out.xlsx')
【讨论】: