ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

`from openpyxl.drawing.image import Image` 是用于在 Excel 工作表中插入图片的导入语句

2026/8/10 11:58:47 拓冰建站 浏览量
`from openpyxl.drawing.image import Image` 是用于在 Excel 工作表中插入图片的导入语句

from openpyxl.drawing.image import Image是用于在 Excel 工作表中插入图片的导入语句,但该用法已过时且不推荐。自openpyxl2.5 版本起,Image类已从openpyxl.drawing.image移至openpyxl.drawing.spreadsheet_drawing(内部模块),而用户应使用openpyxl.worksheet._images.Image或更准确地说:直接从openpyxl.drawing.image导入Image在新版中虽仍可工作,但存在兼容性风险

✅ 正确、稳定、官方推荐的用法是:

fromopenpyxlimportWorkbookfromopenpyxl.drawing.imageimportImage# ✅ 当前版本(如 3.1.x)仍支持,但需注意路径# 注意:Image 类用于加载图片(如 PNG/JPEG),然后添加到 worksheet

示例:

fromopenpyxlimportWorkbookfromopenpyxl.drawing.imageimportImage wb=Workbook()ws=wb.active# 加载图片(路径需存在)img=Image("example.png")img.anchor="A1"# 设置锚定单元格(左上角)ws.add_image(img)# ⚠️ 注意:不是 ws.add_image(),而是 ws._images.append(img)?错!# ✅ 正确添加方式(openpyxl ≥ 2.6):ws.add_image(img,"A1")# 第二个参数为锚定单元格(自动定位)wb.save("with_image.xlsx")

⚠️ 注意事项:

  • 图片文件必须存在且格式为.png,.jpeg,.jpg.bmp不支持);
  • add_image()的第二个参数是目标单元格(字符串,如"B2"),会自动计算偏移;
  • openpyxl不支持向单元格内嵌入图片(即不能像 Excel 手动“置于单元格内”),图片是浮动对象(anchored);
  • 若报错AttributeError: 'Worksheet' object has no attribute 'add_image',说明版本过低(<2.6),请升级:pip install --upgrade openpyxl
    openpyxl中,无法直接通过.width/.height属性设置图片尺寸(这些属性不存在),但可以通过修改图片对象的widthheight属性(单位为像素)来调整显示大小。⚠️ 注意:该调整仅影响 Excel 中的渲染尺寸,不改变原始图像分辨率,且需在调用ws.add_image(img, anchor)之前设置。

✅ 正确做法(openpyxl ≥ 2.6):

fromopenpyxlimportWorkbookfromopenpyxl.drawing.imageimportImage wb=Workbook()ws=wb.active img=Image("logo.png")# ✅ 调整图片宽高(单位:像素)img.width=200# 宽度设为 200 像素img.height=150# 高度设为 150 像素# ⚠️ 注意:若只设 width 或 height,openpyxl 不自动等比缩放(即不保持宽高比)# 如需等比缩放,需手动计算:# original_w, original_h = img.width, img.height# scale = 0.5# img.width = int(original_w * scale)# img.height = int(original_h * scale)ws.add_image(img,"A1")wb.save("resized_image.xlsx")

📌 补充说明:

  • img.width/img.heightopenpyxl.drawing.image.Image对象的可写属性,底层映射到 Excel 的<xdr:ext>尺寸;
  • 若未显式设置,openpyxl默认使用图片原始像素尺寸;
  • 设置后,Excel 中图片将按指定像素值渲染(受 Excel 缩放和 DPI 影响,实际显示可能略有差异);
  • ❌ 不支持设置厘米/英寸等绝对单位——需自行按 96 DPI 换算(1 英寸 ≈ 96 像素);
  • 若需精确控制(如 5cm × 3cm),可换算:width_px = int(5 * 96 / 2.54) ≈ 189height_px = int(3 * 96 / 2.54) ≈ 113