需求:
- 根据单元格的文本内容,插入相同名称的图片;
- 图片大小与单元格大小相同
要用到OS库和openxlpy库
步骤:
- 遍历excel区域里面的单元格,看是否有文本内容
- 根据文本内容确定图片的名称,从而拿到图片地址,确定图片对象
- 将图片对象嵌入到单元格中
import os
from openpyxl import load_workbook
from openpyxl.drawing.image import Image
from openpyxl.drawing.spreadsheet_drawing import AnchorMarker, TwoCellAnchor
excel_file =r"D:\图片调整测试\111.xlsx" #excel地址,别忘记.xlsx
image_folder = r"D:\图片" #图片地址
workbook = load_workbook(excel_file)
ws = workbook['Sheet1'] #要插入的工作表
for row in ws.iter_rows():
for cell in row:
# 如果单元格中有文本内容
if cell.value and isinstance(cell.value, str):
image_name = cell.value + '.jpg'
image_path = os.path.join(image_folder, image_name)
img = Image(image_path)
#处理锚点,得到图片的正确位置
m= cell.row #行号
n = cell.column #列号
_from = AnchorMarker(n-1, 50000, m-1, 50000)
to = AnchorMarker(n, -50000, m, -50000)
img.anchor = TwoCellAnchor('twoCell', _from, to)
ws.add_image(img)
workbook.save(excel_file)
试过很多种方法,将图片的宽高设定成单元格行高列宽一致,但是这样子有个问题,图片和单元格的长宽单位不一致,而且换算起来非常麻烦,还会出现图片大小不对的情况,所以放弃了。
使用锚点去定位图片,而且是嵌入图片,后续改变单元格大小行宽的话图片也可以随之改变大小,非常灵活,参考如何用python向excel中以嵌入单元格的方式插入图片? - 知乎里面“中等难度的贪吃蛇”这位的答案,经过多次验证,代码可以顺利运行