Python實現(xiàn)在Excel中動態(tài)插入與刪除圖片的完整指南
在自動化報表生成、數(shù)據(jù)可視化或辦公流程優(yōu)化中,經(jīng)常需要在 Excel 文件中嵌入圖表、公司 Logo、產(chǎn)品圖片等圖像元素。同時,在某些場景下(如模板清理或隱私 處理),也可能需要移除已存在的圖片。借助 Python 的強大生態(tài),我們可以高效地實現(xiàn)這些操作。
本文將詳細介紹如何使用 openpyxl(適用于 .xlsx 格式)和 xlwings(支持與 Excel 應用交互)兩種主流庫,在 Excel 中添加圖片和刪除圖片,并提供可直接運行的示例代碼。
一、準備工作
安裝依賴庫
# openpyxl:純 Python 操作 Excel,無需安裝 Excel 軟件 pip install openpyxl pillow # xlwings:需本地安裝 Microsoft Excel(Windows/macOS) pip install xlwings
注意:pillow 是 openpyxl 處理圖片所必需的圖像庫。
二、方法一:使用 openpyxl 插入圖片(推薦用于無交互場景)
openpyxl 支持在指定單元格位置插入圖片,并可設置偏移、錨定方式等。
示例:向 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 單元格(左上角對齊)
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 # 創(chuàng)建錨點:從 B2 單元格開始,右偏移 10 像素,下偏移 5 像素 col = 1 # B 列(從 0 開始計數(shù)) 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 通過調(diào)用本地 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()
優(yōu)點:
- 支持插入、刪除、移動、重命名圖片。
- 可獲取圖片位置、大小等屬性。
- 兼容 Excel 原生格式(包括 .xls 和 .xlsx)。
缺點:
- 必須安裝 Microsoft Excel。
- 僅支持 Windows 和 macOS,不適用于 Linux 服務器環(huán)境。
- 進程管理需謹慎(避免 Excel 進程殘留)。
四、對比總結
| 功能 | openpyxl | xlwings |
|---|---|---|
| 插入圖片 | ? | ? |
| 刪除圖片 | ? | ? |
| 無需 Excel 軟件 | ? | ? |
| 支持 Linux | ? | ? |
| 性能(大批量) | 高 | 中(依賴 Excel 進程) |
| 精細控制(偏移/縮放) | 有限 | 強大 |
五、最佳實踐建議
- 生成新報表:優(yōu)先使用
openpyxl,輕量且跨平臺。 - 編輯現(xiàn)有文件(含刪圖) :使用
xlwings,功能全面。 - 生產(chǎn)環(huán)境部署:若在 Linux 服務器運行,只能選擇
openpyxl;Windows 服務器可考慮xlwings(但需安裝 Excel)。 - 異常處理:使用
xlwings時務必用try...finally確保app.quit()被調(diào)用,防止進程泄漏。
結語
通過 Python 操作 Excel 中的圖片,不再是繁瑣的手動任務。無論是自動嵌入分析圖表,還是批量清理敏感圖像,openpyxl 和 xlwings 都提供了強大而簡潔的解決方案。根據(jù)你的運行環(huán)境和功能需求選擇合適的工具,即可輕松實現(xiàn) Excel 圖像的自動化管理,大幅提升辦公效率與系統(tǒng)智能化水平。
到此這篇關于Python實現(xiàn)在Excel中動態(tài)插入與刪除圖片的完整指南的文章就介紹到這了,更多相關Python Excel插入與刪除圖片內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python隨機數(shù)種子(random seed)的設置小結
隨機數(shù)種子是控制偽隨機數(shù)生成器的初始值,通過設置相同的種子,可以確保隨機數(shù)序列的一致性,本文主要介紹了Python隨機數(shù)種子(random seed)的設置,感興趣的可以了解一下2025-03-03
linux環(huán)境下安裝pyramid和新建項目的步驟
這篇文章簡單介紹了linux環(huán)境下安裝pyramid和新建項目的步驟,大家參考使用2013-11-11
python?中collections的?deque使用詳解
這篇文章主要介紹了python中collections的deque使用詳解,deque是一個雙端隊列,如果要經(jīng)常從兩端append的數(shù)據(jù),選擇這個數(shù)據(jù)結構就比較好了,更多相關內(nèi)容,需要的小伙伴可以參考下面文章內(nèi)容2022-09-09

