如何使用 Python 操作 Excel 图片:插入、提取与压缩

在自动化报表和数据可视化的工作中,Excel 文件不仅仅是数字和公式的集合。为了让报表更直观、更易于理解,嵌入图片已成为常见且必要的做法。例如,公司标志可以强化品牌识别,产品缩略图可以让库存表更直观,签名印章则能确保财务报表或合同文档的正式性。然而,当涉及数百份工作表或定期生成的报表时,手动调整图片的尺寸和位置不仅耗时,还容易出错,效率极低。

通过 Python,我们可以实现对 Excel 中图片的自动化管理。这不仅能节省大量人工操作时间,还能确保图片布局一致、美观,同时支持批量处理、图片压缩和格式优化。使用 Python 可以轻松完成以下任务:

  • 将图片插入到指定单元格,并精确控制其位置和尺寸

  • 从 Excel 文件中提取图片,批量保存到本地

  • 删除不需要的图片,清理工作表

  • 批量压缩图片以优化文件大小

  • 动态调整图片尺寸或位置,以适应不同布局需求

本文将基于 Python 展示这些操作的完整流程,并提供详细的示例代码,让你可以快速在实际项目中应用。

环境准备

在开始操作之前,需要确保已经安装了 Spire.XLS for Python。这个库允许对 Excel 文档进行深度操作,无需在本地安装 Microsoft Office,适合自动化脚本、服务器环境以及无头操作场景。

安装方法如下:

复制代码
pip install Spire.XLS

安装完成后,即可开始对 Excel 文件进行图片管理操作。

在 Excel 中插入图片

在实际工作中,经常需要在 Excel 表格中插入静态图片,例如企业 Logo、二维码或者产品图片。手动操作既费时又容易错位,而使用 Python 可以实现精准定位和自动调整尺寸。

下面示例演示了如何在指定单元格插入图片,并通过列和行的偏移量微调其位置,同时调整行高和列宽以适应图片。

python 复制代码
from spire.xls import * 
from spire.xls.common import *

# 创建 Workbook 对象
workbook = Workbook()

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

# 在第1行、第3列添加图片
imgPath = "C:\\Users\\Administrator\\Desktop\\logo.png"
picture = sheet.Pictures.Add(1, 3, imgPath)

# 设置图片宽度和高度
picture.Width = 150
picture.Height = 150

# 调整列宽和行高以适应图片
sheet.Columns[2].ColumnWidth = 25
sheet.Rows[0].RowHeight = 135

# 设置图片与单元格边框的距离
picture.LeftColumnOffset = 90
picture.TopRowOffset = 20

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

提示 :可以通过调整 LeftColumnOffset 和 TopRowOffset 的数值,精确控制图片在单元格内的偏移位置。

从 Excel 中提取图片

在数据整理或资产管理中,你可能会收到带有大量嵌入图片的 Excel 文件,需要将这些图片保存到本地进行分析或归档。手动操作不仅耗时,而且容易遗漏。Python 可以批量提取图片,并按照编号自动保存。

python 复制代码
from spire.xls import *
from spire.xls.common import *

# 创建 Workbook 实例
workbook = Workbook()

# 加载 Excel 文件
workbook.LoadFromFile("Test.xlsx")

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

# 遍历工作表中的所有图片,并保存为 PNG 文件
for i in range(sheet.Pictures.Count - 1, -1, -1):
    pic = sheet.Pictures[i]
    pic.Picture.Save(f"ExtractImages\\Image-{i:d}.png", ImageFormat.get_Png())

workbook.Dispose()

实用技巧 :反向遍历 Pictures 集合可以避免在删除或处理图片时出现索引错误。

删除图片

在自动化处理流程中,可能需要先清理工作表中已有的图片,再插入新的图片。例如:生成月度报告时,先删除上月的图标和签名图片,再批量添加新图片。

python 复制代码
from spire.xls import *
from spire.xls.common import *

# 创建 Workbook 对象
workbook = Workbook()

# 加载 Excel 文件
workbook.LoadFromFile("C:\\Users\\Administrator\\Desktop\\InsertImage.xlsx")

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

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

# 保存到文件
workbook.SaveToFile("output/DeleteImage.xlsx", ExcelVersion.Version2013)
workbook.Dispose()

高级图片操作

除了插入、提取和删除,Spire.XLS 还支持对图片进行压缩、调整大小、移动位置等高级操作,让你的 Excel 文件更美观,同时减少文件体积。

图片压缩

高分辨率图片会显著增加 Excel 文件大小,影响分享和存储。Python 可以自动压缩图片,降低文件体积,同时保证图片质量在可接受范围内。

python 复制代码
from spire.xls import * 
from spire.xls.common import *

# 创建 Workbook 对象
workbook = Workbook()

# 加载 Excel 文件
workbook.LoadFromFile("C:/Users/Administrator/Desktop/Images.xlsx")

# 遍历工作表中的所有图片
for sheet in workbook.Worksheets:
    for picture in sheet.Pictures:
        # 压缩图片,质量等级 50
        picture.Compress(50)

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

调整图片大小

有时需要将图片统一缩放,例如将所有产品图片缩小到原始尺寸的 50%,以适应报表布局。

python 复制代码
from spire.xls import *
from spire.xls.common import *

# 创建 Workbook 对象
workbook = Workbook()

# 加载 Excel 文件
workbook.LoadFromFile("C:/Users/Administrator/Desktop/Image.xlsx")

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

# 获取工作表中的第一张图片
picture = sheet.Pictures[0]

# 缩小图片尺寸
picture.Width = int(picture.Width / 2)
picture.Height = int(picture.Height / 2)

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

移动图片位置

通过调整 TopRow 和 LeftColumn 属性,可以在不改变图片大小的情况下重新定位图片,灵活调整表格布局。

python 复制代码
from spire.xls import *
from spire.xls.common import *

# 创建 Workbook 对象
workbook = Workbook()

# 加载 Excel 文件
workbook.LoadFromFile("C:/Users/Administrator/Desktop/Image.xlsx")

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

# 获取工作表中的第一张图片
picture = sheet.Pictures[0]

# 移动图片位置
picture.TopRow = 5
picture.LeftColumn = 6

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

总结

在 Excel 中自动化图片处理不仅能大幅提升效率,还能确保报表美观、布局统一,特别适合批量生成报表、制作产品目录或整理财务表格。使用 Python 处理 Excel 图片,你可以轻松完成插入、提取、删除、压缩、缩放和移动等操作,实现可重复、可靠的自动化流程。

关键要点:

  • 使用 Pictures.Add() 精准插入图片

  • 使用 Pictures.Remove() 批量删除图片

  • 使用 picture.Compress() 优化文件大小

  • 操作完成后务必调用 workbook.Dispose() 释放系统资源

额外建议:在处理大量图片时,可以结合 Python 的循环和条件判断,实现更加智能化的报表生成流程。例如,根据图片大小自动压缩或根据表格位置自动调整图片偏移量。

相关推荐
朝朝辞暮i3 小时前
VLA 系统学习第 4 课:一个 Batch 进入神经网络后,模型到底是怎么“学会”的?
人工智能·python·神经网络·vla
Ada's4 小时前
【计算机基础系列】003:Python数据结构
开发语言·数据结构·python
2601_962885724 小时前
如何用 Python 计算 TRIX 三重指数平滑均线指标?
开发语言·python
还卿一钵无情泪4 小时前
Unsloth 微调 构建自己的大模型 没有GPU也能微调
linux·开发语言·人工智能·python·大模型·nlp·unsloth
蜗牛互联网7 小时前
Python消费Responses SSE事件:增量文本、超时与取消
java·开发语言·人工智能·后端·python
statistican_ABin7 小时前
中国国际旅游发展分析报告—基于世界银行国际旅游数据的多维度分析
python·机器学习·旅游
青少儿编程课堂8 小时前
背包问题(0/1 背包与完全背包)解题精讲——动态规划入门
c++·python·算法·bfs·信息学竞赛
code2cat8 小时前
【随笔】MCP工具注解的信任边界:四个提示如何参与调用决策
python·ai agent·mcp
慢云智慧空间8 小时前
从设备智能到空间理解,慢云科技如何重新定义智慧建筑
python·科技
浮链序8 小时前
用 Claude Haiku 5.5 做子智能体路由,把 Agent 成本砍掉六成
人工智能·python·llm