如何用Python在Excel指定单元格内插入图片?
在Excel单元格内插入图片的实现方案(基于openpyxl)
openpyxl本身不支持直接将图片“嵌入”单元格内部——它只能将图片作为浮动对象添加到工作表中,即使设置了锚点,图片也只是覆盖在单元格上方,不会和单元格真正绑定。不过可以通过以下方法模拟“图片在单元格内”的效果,让图片随单元格移动、调整大小:
核心思路
- 调整目标单元格的宽高(可选,根据图片尺寸适配)
- 将图片大小调整为匹配单元格的尺寸
- 设置图片锚定到目标单元格,并配置其随单元格移动、调整大小的属性
示例代码
from openpyxl import Workbook from openpyxl.drawing.image import Image # 初始化工作簿和工作表 wb = Workbook() ws = wb.active # 1. 配置目标单元格的大小(按需调整) target_cell = "A1" ws.column_dimensions[target_cell[0]].width = 18 # 设置列宽(字符数) ws.row_dimensions[int(target_cell[1:])].height = 90 # 设置行高(磅) # 2. 加载图片并调整尺寸匹配单元格 img = Image("your_image.png") # 转换Excel单位到像素(近似值,适配默认字体) cell_width = ws.column_dimensions[target_cell[0]].width * 7.25 cell_height = ws.row_dimensions[int(target_cell[1:])].height * 1.333 # 调整图片大小(如需保持比例,可只调整宽/高中一个,另一个按比例计算) img.width = cell_width img.height = cell_height # 3. 绑定图片到单元格,设置随单元格移动和调整 img.anchor = target_cell # 设置图片锚定规则为跟随单个单元格 img.drawing.anchor.editAs = "oneCell" ws.add_image(img) # 保存文件 wb.save("image_in_cell.xlsx")
说明
- 这种方法本质上还是将图片作为浮动对象处理,但通过配置
editAs = "oneCell",可以让图片和单元格绑定:调整单元格大小时图片会同步缩放,移动单元格时图片也会跟着移动。 - 单位转换的数值是近似值,如果使用非默认字体,可能需要微调转换系数来适配。
内容的提问来源于stack exchange,提问作者Omar Keshk
相关产品推荐
相关产品推荐

