Python實(shí)現(xiàn)在Excel中動(dòng)態(tài)插入與刪除圖片的完整指南
在自動(dòng)化報(bào)表生成、數(shù)據(jù)可視化或辦公流程優(yōu)化中,經(jīng)常需要在 Excel 文件中嵌入圖表、公司 Logo、產(chǎn)品圖片等圖像元素。同時(shí),在某些場(chǎng)景下(如模板清理或隱私 處理),也可能需要移除已存在的圖片。借助 Python 的強(qiáng)大生態(tài),我們可以高效地實(shí)現(xiàn)這些操作。
本文將詳細(xì)介紹如何使用 openpyxl(適用于 .xlsx 格式)和 xlwings(支持與 Excel 應(yīng)用交互)兩種主流庫(kù),在 Excel 中添加圖片和刪除圖片,并提供可直接運(yùn)行的示例代碼。
一、準(zhǔn)備工作
安裝依賴(lài)庫(kù)
# openpyxl:純 Python 操作 Excel,無(wú)需安裝 Excel 軟件 pip install openpyxl pillow # xlwings:需本地安裝 Microsoft Excel(Windows/macOS) pip install xlwings
注意:pillow 是 openpyxl 處理圖片所必需的圖像庫(kù)。
二、方法一:使用 openpyxl 插入圖片(推薦用于無(wú)交互場(chǎng)景)
openpyxl 支持在指定單元格位置插入圖片,并可設(shè)置偏移、錨定方式等。
示例:向 Excel 插入圖片
from openpyxl import Workbook
from openpyxl.drawing.image import Image
# 創(chuàng)建新工作簿或加載現(xiàn)有文件
wb = Workbook()
ws = wb.active
# 加載圖片(支持 PNG、JPG、BMP 等)
img = Image("logo.png")
# 可選:調(diào)整圖片尺寸(單位為像素)
img.width = 150
img.height = 100
# 將圖片錨定到 A1 單元格(左上角對(duì)齊)
ws.add_image(img, "A1")
# 保存文件
wb.save("with_image.xlsx")
print("圖片已成功插入 Excel!")
高級(jí)用法:精確控制位置
若需更精細(xì)控制(如偏移量),可使用 AnchorMarker:
from openpyxl.drawing.spreadsheet_drawing import OneCellAnchor, AnchorMarker from openpyxl.utils.units import pixels_to_EMU # 創(chuàng)建錨點(diǎn):從 B2 單元格開(kāi)始,右偏移 10 像素,下偏移 5 像素 col = 1 # B 列(從 0 開(kāi)始計(jì)數(shù)) row = 1 # 第 2 行(從 0 開(kāi)始) 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 不支持刪除已有圖片。它只能在新建或加載的工作表中添加新圖片,無(wú)法識(shí)別或移除原始文件中的圖像。
三、方法二:使用 xlwings 插入與刪除圖片(支持完整 CRUD)
xlwings 通過(guò)調(diào)用本地 Excel 應(yīng)用程序,能讀取、修改甚至刪除工作表中的所有對(duì)象,包括圖片。
示例 1:插入圖片
import xlwings as xw
app = xw.App(visible=False) # 后臺(tái)運(yùn)行 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"]
# 刪除當(dāng)前工作表中的所有圖片
for pic in ws.pictures:
pic.delete()
wb.save("cleaned_report.xlsx")
wb.close()
app.quit()
print("所有圖片已刪除!")
示例 3:按名稱(chēng)刪除特定圖片
# 假設(shè)圖片名為 "Logo"
if "Logo" in [p.name for p in ws.pictures]:
ws.pictures["Logo"].delete()
優(yōu)點(diǎn):
- 支持插入、刪除、移動(dòng)、重命名圖片。
- 可獲取圖片位置、大小等屬性。
- 兼容 Excel 原生格式(包括 .xls 和 .xlsx)。
缺點(diǎn):
- 必須安裝 Microsoft Excel。
- 僅支持 Windows 和 macOS,不適用于 Linux 服務(wù)器環(huán)境。
- 進(jìn)程管理需謹(jǐn)慎(避免 Excel 進(jìn)程殘留)。
四、對(duì)比總結(jié)
| 功能 | openpyxl | xlwings |
|---|---|---|
| 插入圖片 | ? | ? |
| 刪除圖片 | ? | ? |
| 無(wú)需 Excel 軟件 | ? | ? |
| 支持 Linux | ? | ? |
| 性能(大批量) | 高 | 中(依賴(lài) Excel 進(jìn)程) |
| 精細(xì)控制(偏移/縮放) | 有限 | 強(qiáng)大 |
五、最佳實(shí)踐建議
- 生成新報(bào)表:優(yōu)先使用
openpyxl,輕量且跨平臺(tái)。 - 編輯現(xiàn)有文件(含刪圖) :使用
xlwings,功能全面。 - 生產(chǎn)環(huán)境部署:若在 Linux 服務(wù)器運(yùn)行,只能選擇
openpyxl;Windows 服務(wù)器可考慮xlwings(但需安裝 Excel)。 - 異常處理:使用
xlwings時(shí)務(wù)必用try...finally確保app.quit()被調(diào)用,防止進(jìn)程泄漏。
結(jié)語(yǔ)
通過(guò) Python 操作 Excel 中的圖片,不再是繁瑣的手動(dòng)任務(wù)。無(wú)論是自動(dòng)嵌入分析圖表,還是批量清理敏感圖像,openpyxl 和 xlwings 都提供了強(qiáng)大而簡(jiǎn)潔的解決方案。根據(jù)你的運(yùn)行環(huán)境和功能需求選擇合適的工具,即可輕松實(shí)現(xiàn) Excel 圖像的自動(dòng)化管理,大幅提升辦公效率與系統(tǒng)智能化水平。
到此這篇關(guān)于Python實(shí)現(xiàn)在Excel中動(dòng)態(tài)插入與刪除圖片的完整指南的文章就介紹到這了,更多相關(guān)Python Excel插入與刪除圖片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python隨機(jī)數(shù)種子(random seed)的設(shè)置小結(jié)
隨機(jī)數(shù)種子是控制偽隨機(jī)數(shù)生成器的初始值,通過(guò)設(shè)置相同的種子,可以確保隨機(jī)數(shù)序列的一致性,本文主要介紹了Python隨機(jī)數(shù)種子(random seed)的設(shè)置,感興趣的可以了解一下2025-03-03
linux環(huán)境下安裝pyramid和新建項(xiàng)目的步驟
這篇文章簡(jiǎn)單介紹了linux環(huán)境下安裝pyramid和新建項(xiàng)目的步驟,大家參考使用2013-11-11
python?中collections的?deque使用詳解
這篇文章主要介紹了python中collections的deque使用詳解,deque是一個(gè)雙端隊(duì)列,如果要經(jīng)常從兩端append的數(shù)據(jù),選擇這個(gè)數(shù)據(jù)結(jié)構(gòu)就比較好了,更多相關(guān)內(nèi)容,需要的小伙伴可以參考下面文章內(nèi)容2022-09-09
使用Python對(duì)文件進(jìn)行批量改名的方法
這篇文章主要介紹了使用Python對(duì)文件進(jìn)行批量改名的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03

