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

 更新时间:2026年01月30日 08:53:11   作者:大黄评测  
在自动化报表生成、数据可视化或办公流程优化中,经常需要在 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()

优点:

  • 支持插入、删除、移动、重命名图片。
  • 可获取图片位置、大小等属性。
  • 兼容 Excel 原生格式(包括 .xls 和 .xlsx)。

缺点:

  • 必须安装 Microsoft Excel。
  • 仅支持 Windows 和 macOS,不适用于 Linux 服务器环境。
  • 进程管理需谨慎(避免 Excel 进程残留)。

四、对比总结

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

五、最佳实践建议

  • 生成新报表:优先使用 openpyxl,轻量且跨平台。
  • 编辑现有文件(含删图) :使用 xlwings,功能全面。
  • 生产环境部署:若在 Linux 服务器运行,只能选择 openpyxl;Windows 服务器可考虑 xlwings(但需安装 Excel)。
  • 异常处理:使用 xlwings 时务必用 try...finally 确保 app.quit() 被调用,防止进程泄漏。

结语

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

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

相关文章

  • pandas中使用数据透视表的示例代码

    pandas中使用数据透视表的示例代码

    本文主要介绍了pandas中使用数据透视表的示例代码,主要包含pivot_table函数的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-12-12
  • Python随机数种子(random seed)的设置小结

    Python随机数种子(random seed)的设置小结

    随机数种子是控制伪随机数生成器的初始值,通过设置相同的种子,可以确保随机数序列的一致性,本文主要介绍了Python随机数种子(random seed)的设置,感兴趣的可以了解一下
    2025-03-03
  • Python生成二维码的教程详解

    Python生成二维码的教程详解

    作为一名合格的 Python 程序员,在工作中必然会用到二维码相关操作,那如何快速的用 Python 实现呢?别着急,咱们这篇博客就为你解决
    2022-10-10
  • linux环境下安装pyramid和新建项目的步骤

    linux环境下安装pyramid和新建项目的步骤

    这篇文章简单介绍了linux环境下安装pyramid和新建项目的步骤,大家参考使用
    2013-11-11
  • Python递归实现打印多重列表代码

    Python递归实现打印多重列表代码

    今天小编就为大家分享一篇Python递归实现打印多重列表代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Java中的各种单例模式优缺点解析

    Java中的各种单例模式优缺点解析

    这篇文章主要介绍了Java中的各种单例模式解析,单例模式是Java中最简单的设计模式之一,这种类型的设计模式属于创建者模式,它提供了一种访问对象的最佳方式,需要的朋友可以参考下
    2023-07-07
  • pygame实现时钟效果

    pygame实现时钟效果

    这篇文章主要为大家详细介绍了pygame实现时钟效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • 运用python去除图片水印

    运用python去除图片水印

    本文介绍了如何运用python去除图片的水印,文中使用图片以及代码详细的介绍了两种去除的方法,感兴趣的朋友可以自己参考一下
    2021-08-08
  • python 中collections的 deque使用详解

    python 中collections的 deque使用详解

    这篇文章主要介绍了python中collections的deque使用详解,deque是一个双端队列,如果要经常从两端append的数据,选择这个数据结构就比较好了,更多相关内容,需要的小伙伴可以参考下面文章内容
    2022-09-09
  • 使用Python对文件进行批量改名的方法

    使用Python对文件进行批量改名的方法

    这篇文章主要介绍了使用Python对文件进行批量改名的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03

最新评论