在众多 Python 库中,如 pandasopenpyxl 等,虽然能处理 Excel 表格结构,但对图片操作支持有限。例如:

  • openpyxl 只能读写单元格内容,无法直接操作图片。
  • xlwings 虽可调用 Excel 界面,但依赖运行环境,不适用于脚本自动化。

相比之下,Free Spire.XLS for Python 是一款专为处理 Excel 文件设计的跨平台库,支持图片的添加、删除、裁剪、格式调整等完整功能,且无需安装 Excel,无需依赖 COM 接口,完全在 Python 环境中运行。

✅ 优势总结如下:

对比维度 Free Spire.XLS for Python openpyxl / xlwings
图片添加支持 ✅ 支持 ❌ 仅支持单元格内容
图片删除支持 ✅ 支持 ❌ 无直接接口
无需 Excel 运行 ✅ 支持 ❌ 需Excel环境
脚本自动化 ✅ 高效 ⚠️ 依赖外部环境

📌 说明:Free Spire.XLS for Python 支持 .xlsx 和 .xls 格式,但有篇幅限制,适用于小型文档。

Python 添加图片到 Excel 中的完整流程

步骤1:安装库

pip install spire.xls.free

步骤2:代码示例 — 将图片添加到指定单元格位置

该场景适用于图片需与单元格内容对齐的情况(如报表中图片对应某行数据),核心是通过 Worksheet.Pictures.Add() 指定图片路径和目标单元格。

from spire.xls import *
from spire.xls.common import *
     
# 创建工作簿对象
workbook = Workbook()

# 获取第一个工作表
sheet = workbook.Worksheets[0]

# 添加图片到工作表指定单元格
imgPath = "logo.png"
picture = sheet.Pictures.Add(1, 3, imgPath)

# 调整单元格大小以容纳图片
sheet.Columns[2].ColumnWidth = 25
sheet.Rows[0].RowHeight = 135

# 保存文件
workbook.SaveToFile("InsertImage.xlsx", ExcelVersion.Version2013)
workbook.Dispose()

扩展技能:自定义图片位置和尺寸添加

若需精确控制图片的坐标和宽高,可通过 ExcelPicture 提供的 LeftColumnOffset / TopRowOffset / Width / Height 属性设置:

from spire.xls import *
from spire.xls.common import *

# 创建工作簿对象
workbook = Workbook()

# 获取第一个工作表
sheet = workbook.Worksheets[0]

# 添加图片到工作表指定单元格
imgPath = "logo.png"
picture = sheet.Pictures.Add(1, 3, imgPath)

# 自定义图片位置
picture.LeftColumnOffset = 90 # 左侧偏移90
picture.TopRowOffset = 20 # 顶部偏移20

# 自定义图片尺寸
picture.Width = 150
picture.Height = 150

# 保存文件
workbook.SaveToFile("add_custom_size_image.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

通过 Python 删除 Excel 中图片的实现方法

Free Spire.XLS for Python 支持按索引删除指定图片或批量删除所有图片,以下是具体实现。

场景 1:删除指定位置的图片

工作表中的图片以列表形式存储在 Pictures 属性中,可通过索引(从 0 开始)定位并删除:

from spire.xls import *
from spire.xls.common import *

# 加载 Excel 文件
workbook = Workbook()
workbook.LoadFromFile("InsertImage.xlsx")

# 获取第一个工作表
sheet = workbook.Worksheets[0]

# 删除工作表中第一张图片
sheet.Pictures[0].Remove()

# 保存文件
workbook.SaveToFile("DeleteImage.xlsx", ExcelVersion.Version2013)
workbook.Dispose()
删除工作表中所有图片

通过遍历 Pictures 列表,批量删除所有图片:

from spire.xls import *
from spire.xls.common import *

# 加载 Excel 文件
workbook = Workbook()
workbook.LoadFromFile("InsertImage.xlsx")

# 获取第一个工作表
sheet = workbook.Worksheets[0]

# 删除工作表中所有图片
for i in range(sheet.Pictures.Count - 1, -1, -1):
    sheet.Pictures[i].Remove()

# 保存文件
workbook.SaveToFile("DeleteAllImage.xlsx", ExcelVersion.Version2013)
workbook.Dispose()
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐