`from openpyxl.drawing.image import Image` 是用于在使用 `openpyxl` 库操作 Excel 文件时
📅 2026/8/2 11:41:55
👁️ 阅读次数
📝 编程学习
from openpyxl.drawing.image import Image是用于在使用openpyxl库操作 Excel 文件时,向工作表中插入图片的导入语句。注意:该Image类并非用于图像处理(如 PIL/Pillow),而是专用于将图片(如 PNG、JPG 等)嵌入到 Excel 工作表中的对象。使用前需确保已安装openpyxl,且图片文件路径有效。
基本用法示例:
fromopenpyxlimportWorkbookfromopenpyxl.drawing.imageimportImage wb=Workbook()ws=wb.active# 创建 Image 对象(路径需为本地绝对或相对路径)img=Image('example.png')img.anchor='A1'# 设置图片锚定单元格(左上角位置)ws.add_image(img)wb.save('with_image.xlsx')⚠️ 注意事项:
openpyxl不支持直接从 URL 加载图片,必须是本地文件;- 图片格式建议使用 PNG(兼容性最好),JPG 也可用但需确保无透明通道问题;
Image对象不支持缩放、裁剪等编辑操作,仅支持定位与尺寸微调(通过width/height属性间接影响,但实际以原始像素为准,Excel 中可能自动适配);- 插入图片后保存的 Excel 文件需用 Excel 或兼容软件打开才能正常显示(部分在线表格工具可能不渲染图片)。
在openpyxl中调整插入图片的大小和位置需结合Image对象属性与工作表单元格锚定机制,但需注意:openpyxl.drawing.image.Image本身不直接提供width/height设置接口(这些属性被忽略),实际尺寸由图片原始像素和 Excel 的缩放逻辑决定。不过可通过以下可靠方式实现精准控制:
✅ 1. 调整位置(锚定单元格 + 偏移)
使用anchor属性指定图片左上角锚定的单元格(如'B3'),再通过offset微调像素级偏移:
fromopenpyxl.drawing.imageimportImage img=Image('logo.png')img.anchor='B3'# 锚定到 B3 单元格左上角img.offset=(10,5)# 向右偏移 10px,向下偏移 5px(相对于 B3 左上角)ws.add_image(img)⚠️
offset单位为像素,且仅在保存后由 Excel 渲染时生效。
✅ 2. 调整大小(核心方法:修改图片原始尺寸或利用 Excel 单元格行列高宽)
由于openpyxl不支持运行时缩放图片,推荐两种实践方案:
▪ 方案 A:预处理图片(推荐 ✅)
用 Pillow(PIL)提前缩放图片,再插入:
fromPILimportImageasPilImagefromopenpyxl.drawing.imageimportImageasOpenpyxlImage# 缩放原图至目标尺寸(例如 200×100 像素)pil_img=PilImage.open('logo.png')pil_img=pil_img.resize((200,100),PilImage.Resampling.LANCZOS)pil_img.save('logo_resized.png')# 保存临时缩放图img=OpenpyxlImage('logo_resized.png')img.anchor='B3'ws.add_image(img)▪ 方案 B:匹配 Excel 行高列宽(间接控制显示大小)
Excel 中图片会按比例适应其覆盖的单元格区域。可手动设置行列尺寸,使图片“视觉上”缩放:
# 设置 B3 所在行高(单位:磅)和列宽(单位:字符宽度)ws.row_dimensions[3].height=60# 第3行高 ≈ 60 磅(约80像素)ws.column_dimensions['B'].width=20# B列宽 ≈ 20 字符(约150像素)# 再插入图片并锚定到 B3,Excel 会自动按单元格比例缩放显示💡 提示:
openpyxl的column_dimensions.width和row_dimensions.height可精确控制,是间接调控图片显示尺寸的有效手段。
❌ 不起作用的方式(常见误区)
img.width = 200或img.height = 100→无效!Image类无此可写属性;img.scale_x = 0.5→不存在该属性,openpyxl当前版本(3.1+)不支持运行时缩放。
✅ 进阶:动态计算锚点以居中/对齐
# 将图片居中于单元格区域 C5:E10start_row,end_row=5,10start_col,end_col=3,5# C=3, E=5# 计算中心单元格(取整)center_row=(start_row+end_row)//2center_col=get_column_letter((start_col+end_col)//2)# 需 from openpyxl.utils import get_column_letterimg.anchor=f"{center_col}{center_row}"
编程学习
技术分享
实战经验