本文收录于《Python入门核心技术》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。
大家好,我是水滴~~
本文主要讲解如何利用 Python 来批量提取 Excel 中的图片,分别保存到目录中。并将程序打包成可执行文件,方便直接运行使用。希望能对你有所帮助!
注意:不支持“嵌入单元格中的图片”,需要先转为“浮动图片”
文章目录
- 前言
- 一、代码讲解
- 1.1 安装第三方库
- 1.2 完整代码
- 二、工具下载
前言
- 该工具只支持
xlsx
格式的文件,如果是xls
格式需要先转为xlsx
; - 该工具不能识别“嵌入单元格图片”,需要先转为“浮动图片”才能被识别;
- 该工具为
exe
格式,只支持 Windows 系统下运行; - 该工具可以处理输入目录中的所有
xlsx
文件; - 如果对代码不感兴趣,可以跳过“代码讲解”章节,直接下载工具来使用即可。
一、代码讲解
1.1 安装第三方库
该代码使用了两个第三方库:openpyxl
和pillow
,在使用前需要提前安装:
pip install openpyxl
pip install pillow
1.2 完整代码
- 该代码首先需要用户输入一个包括
xlsx
文件的目录,例如:C:/temp
; get_xlsx_files()
方法可以获取该目录下所有xlsx
文件,并以列表的方式返回;- 遍历
xlsx
文件列表,逐个文件处理并创建与之对应的文件夹; - 加载 Excel 文件,遍历所有
Sheet
页,并逐个处理; - 获取该
Sheet
页中所有图片,并逐个保存到本地; - 所有的 Excel 文件处理完后,结束。
import io
import os
import time
from PIL import Image
from openpyxl import load_workbook
# 获取xlsx文件列表
def get_xlsx_files(input_path):
xlsx_files = list()
for filename in os.listdir(input_path):
if filename.endswith(".xlsx"):
xlsx_files.append(filename)
return xlsx_files
# xlsx文件路径(注意:不支持xls)
xlsx_path = input("请输入你的xlsx文件所在目录(例如 C:/temp):").replace('\\', '/')
for xlsx_file in get_xlsx_files(xlsx_path):
# 创建图片保存目录
saveDir = xlsx_path + "/" + xlsx_file + "_images/"
print(saveDir)
if not os.path.exists(saveDir):
os.makedirs(saveDir)
# 加载Excel文件
wb = load_workbook(xlsx_path + "/" + xlsx_file)
# 遍历每个Sheet页
for sheet in wb.sheetnames:
print("Sheet:" + sheet)
ws = wb[sheet]
count = 0
# 遍历每个图片并保存
for image in ws._images:
count += 1
img = Image.open(io.BytesIO(image._data()))
img_name = f"{sheet}_{count}.jpg"
print("Image:" + img_name)
img.save(saveDir + img_name)
print("结束")
time.sleep(60)
二、工具下载
为了方便使用,我将该程序打包成为 exe
可执行文件,你可以直接下载使用。
下载链接:https://pan.quark.cn/s/048f15ebda68