如何通过Python调用Excel新功能“插入图片到单元格”
在Excel单元格内嵌图片的Python实现方案
你提到的Excel「单元格绑定图片」功能(图片随单元格大小调整、同步移动),可以通过以下两种主流工具实现:
1. 使用openpyxl(跨平台推荐)
openpyxl从3.0.10版本开始支持将图片嵌入单元格,替代此前的浮动图片模式。示例代码如下:
from openpyxl import Workbook from openpyxl.drawing.image import Image from openpyxl.drawing.spreadsheet_drawing import AnchorMarker, TwoCellAnchor wb = Workbook() ws = wb.active # 加载目标图片 img = Image("your_image.png") # 设置图片锚定到指定单元格(示例为A1) # 通过锚点定义让图片完全适配单元格范围 anchor = TwoCellAnchor( from_=AnchorMarker(col=0, colOff=0, row=0, rowOff=0), # 左上角绑定A1起始位置 to=AnchorMarker(col=1, colOff=0, row=1, rowOff=0) # 右下角绑定A1结束位置 ) img.anchor = anchor # 将图片添加到工作表 ws.add_image(img) wb.save("embedded_image.xlsx")
注意事项:
- 需确保安装openpyxl 3.0.10及以上版本,执行
pip install --upgrade openpyxl完成更新 col和row参数从0开始计数(col=0对应A列,row=0对应第1行),可按需修改目标单元格- 若要让图片随单元格自动缩放,需取消图片的宽高锁定(可通过
img.image.lockAspectRatio = False实现)
2. 使用pywin32(Windows平台,原生Excel功能调用)
如果在Windows环境下,可直接调用Excel的COM对象,完全复刻手动插入内嵌图片的操作:
import win32com.client as win32 excel = win32.gencache.EnsureDispatch('Excel.Application') excel.Visible = True # 设为False可后台运行 wb = excel.Workbooks.Add() ws = wb.ActiveSheet # 选中目标单元格(示例为A1) ws.Range("A1").Select() # 插入图片并绑定到单元格 excel.ActiveSheet.Shapes.AddPicture( Filename="your_image.png", LinkToFile=False, SaveWithDocument=True, Left=excel.ActiveCell.Left, Top=excel.ActiveCell.Top, Width=excel.ActiveCell.Width, Height=excel.ActiveCell.Height ) # 设置图片随单元格移动并自动调整大小 target_shape = ws.Shapes(ws.Shapes.Count) target_shape.LockAspectRatio = False target_shape.Placement = 1 # xlMoveAndSize 对应Excel内置的随单元格调整属性 wb.SaveAs("embedded_image_win.xlsx") excel.Quit()
该方法完全利用Excel原生逻辑,与手动操作效果一致,支持所有Excel内置的图片嵌入特性。
关于XlsxWriter的局限性
XlsxWriter目前仅支持添加浮动图片,无法实现单元格绑定,因为其底层未实现Excel的单元格锚定格式。若需内嵌功能,建议切换至上述工具。
内容的提问来源于stack exchange,提问作者FlappingWings
相关产品推荐
相关产品推荐

