OpenPyXL是Python中用于读写Excel 2010及以上版本文件的常用库,除了处理单元格数据、样式之外,还支持在Excel工作表中插入图片并调整其位置和尺寸,能够满足在指定单元格中嵌入图片的业务需求。

环境准备
首先需要安装OpenPyXL库,同时插入图片功能依赖Pillow库来处理图片文件,执行以下命令完成安装:
pip install openpyxl pillow
核心实现逻辑
要在单元格中精确插入图片,需要明确两个核心要素:一是图片的锚定位置,即图片左上角对应的单元格坐标;二是图片的尺寸,需要计算目标单元格的宽度和高度,将图片调整为匹配的大小。
单元格尺寸单位转换
OpenPyXL中单元格的宽度单位是字符宽度,高度单位是磅,而图片的尺寸单位是像素,需要通过转换公式完成适配:
- 1个字符宽度约等于7像素
- 1磅约等于1.33像素
图片插入基础方法
OpenPyXL通过openpyxl.drawing.image.Image类加载图片,再通过worksheet.add_image()方法将图片添加到工作表中,同时可以设置图片的锚定位置和尺寸。
完整代码示例
以下代码实现了在Excel的B2单元格中精确插入图片,并将图片尺寸调整为完全匹配B2单元格的大小:
from openpyxl import Workbook
from openpyxl.drawing.image import Image
from openpyxl.utils import get_column_letter
# 创建新的工作簿
wb = Workbook()
ws = wb.active
ws.title = "图片插入示例"
# 设置目标单元格B2的行高和列宽
target_row = 2
target_col = 2
# 设置列宽为20字符,对应约140像素
ws.column_dimensions[get_column_letter(target_col)].width = 20
# 设置行高为105磅,对应约140像素
ws.row_dimensions[target_row].height = 105
# 加载图片文件,替换为你的图片路径
img = Image("test_image.png")
# 设置图片尺寸匹配单元格,宽度140像素,高度140像素
img.width = 140
img.height = 140
# 将图片锚定到B2单元格左上角
img.anchor = f"{get_column_letter(target_col)}{target_row}"
# 将图片添加到工作表
ws.add_image(img)
# 保存文件
wb.save("output.xlsx")
print("图片插入完成,文件已保存为output.xlsx")
常见问题处理
图片位置偏移问题
如果出现图片位置不在单元格左上角的情况,可以检查锚定坐标是否正确,确保锚定字符串的格式是列字母加行号,例如B2、C3等。
图片尺寸不匹配问题
如果设置的像素尺寸和实际单元格显示不一致,可以重新计算列宽和行高的转换比例,根据实际显示效果微调img.width和img.height的数值。
图片格式支持问题
OpenPyXL支持常见的图片格式如PNG、JPG、JPEG等,如果遇到格式不支持的错误,可以先将图片转换为支持的格式再尝试插入。
总结
使用OpenPyXL在Excel单元格中精确插入和调整图片的核心是先设置好目标单元格的行高和列宽,再加载图片并调整其尺寸匹配单元格大小,最后将图片锚定到目标单元格位置。通过上述方法可以快速实现Excel中图片的精准嵌入,适配各类办公自动化场景的需求。
OpenPyXLExcel操作单元格图片插入图片尺寸调整Python办公自动化修改时间:2026-07-23 00:36:22