python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python Excel插入与删除图片

Python实现在Excel中动态插入与删除图片的完整指南

作者:大黄评测

在自动化报表生成、数据可视化或办公流程优化中,经常需要在 Excel 文件中嵌入图表,本文将详细介绍如何使用主流库在 Excel 中添加图片和删除图片,有需要的小伙伴可以了解下

在自动化报表生成、数据可视化或办公流程优化中,经常需要在 Excel 文件中嵌入图表、公司 Logo、产品图片等图像元素。同时,在某些场景下(如模板清理或隐私 处理),也可能需要移除已存在的图片。借助 Python 的强大生态,我们可以高效地实现这些操作。

本文将详细介绍如何使用 openpyxl(适用于 .xlsx 格式)和 xlwings(支持与 Excel 应用交互)两种主流库,在 Excel 中添加图片删除图片,并提供可直接运行的示例代码。

一、准备工作

安装依赖库

# openpyxl:纯 Python 操作 Excel,无需安装 Excel 软件
pip install openpyxl pillow

# xlwings:需本地安装 Microsoft Excel(Windows/macOS)
pip install xlwings

注意:pillowopenpyxl 处理图片所必需的图像库。

二、方法一:使用 openpyxl 插入图片(推荐用于无交互场景)

openpyxl 支持在指定单元格位置插入图片,并可设置偏移、锚定方式等。

示例:向 Excel 插入图片

from openpyxl import Workbook
from openpyxl.drawing.image import Image

# 创建新工作簿或加载现有文件
wb = Workbook()
ws = wb.active

# 加载图片(支持 PNG、JPG、BMP 等)
img = Image("logo.png")

# 可选:调整图片尺寸(单位为像素)
img.width = 150
img.height = 100

# 将图片锚定到 A1 单元格(左上角对齐)
ws.add_image(img, "A1")

# 保存文件
wb.save("with_image.xlsx")
print("图片已成功插入 Excel!")

高级用法:精确控制位置

若需更精细控制(如偏移量),可使用 AnchorMarker

from openpyxl.drawing.spreadsheet_drawing import OneCellAnchor, AnchorMarker
from openpyxl.utils.units import pixels_to_EMU

# 创建锚点:从 B2 单元格开始,右偏移 10 像素,下偏移 5 像素
col = 1  # B 列(从 0 开始计数)
row = 1  # 第 2 行(从 0 开始)
x_offset = pixels_to_EMU(10)
y_offset = pixels_to_EMU(5)

marker = AnchorMarker(col=col, colOff=x_offset, row=row, rowOff=y_offset)
anchor = OneCellAnchor(_from=marker, ext=img._size)
ws._images.append(img)
ws.drawing.anchor.append(anchor)

注意:openpyxl 不支持删除已有图片。它只能在新建或加载的工作表中添加新图片,无法识别或移除原始文件中的图像。

三、方法二:使用 xlwings 插入与删除图片(支持完整 CRUD)

xlwings 通过调用本地 Excel 应用程序,能读取、修改甚至删除工作表中的所有对象,包括图片。

示例 1:插入图片

import xlwings as xw

app = xw.App(visible=False)  # 后台运行 Excel
wb = app.books.open("report.xlsx")
ws = wb.sheets["Sheet1"]

# 在 A1 单元格左上角插入图片
ws.pictures.add("chart.jpg", left=ws.range("A1").left, top=ws.range("A1").top)

wb.save("report_with_image.xlsx")
wb.close()
app.quit()
print("图片已插入!")

示例 2:删除所有图片

import xlwings as xw

app = xw.App(visible=False)
wb = app.books.open("report_with_image.xlsx")
ws = wb.sheets["Sheet1"]

# 删除当前工作表中的所有图片
for pic in ws.pictures:
    pic.delete()

wb.save("cleaned_report.xlsx")
wb.close()
app.quit()
print("所有图片已删除!")

示例 3:按名称删除特定图片

# 假设图片名为 "Logo"
if "Logo" in [p.name for p in ws.pictures]:
    ws.pictures["Logo"].delete()

优点:

缺点:

四、对比总结

功能openpyxlxlwings
插入图片
删除图片
无需 Excel 软件
支持 Linux
性能(大批量)中(依赖 Excel 进程)
精细控制(偏移/缩放)有限强大

五、最佳实践建议

结语

通过 Python 操作 Excel 中的图片,不再是繁琐的手动任务。无论是自动嵌入分析图表,还是批量清理敏感图像,openpyxlxlwings 都提供了强大而简洁的解决方案。根据你的运行环境和功能需求选择合适的工具,即可轻松实现 Excel 图像的自动化管理,大幅提升办公效率与系统智能化水平。

到此这篇关于Python实现在Excel中动态插入与删除图片的完整指南的文章就介绍到这了,更多相关Python Excel插入与删除图片内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文