提取excel中的图片
需求: 提取excel中嵌入单元格的图片
实现思路: 用pandas读取文件,对于嵌入图片的单元格则会显示其函数
问题:wps与office嵌入方法有所不同,wps使用函数嵌套,而office则是设置随单元格大小变动,对于后者,会被视为是悬浮的图片,使用pandas无法提取任何一张图片
源文件如下:
该文件是用office处理的
B2为一张没有嵌套函数、随单元格大小变化的嵌入式图片,其他为公式嵌套的图片
直接用pandas对比wps和office,可以发现office处理的文件,无法提取到图片
- 转化读取方式
对于xls,设置引擎为xlrd即可提取
对于xlsx,使用openpyxl读取再转换成df
此时还有B2提取不到,所以还需要判断悬浮式图片的起始位置和结束为止在同一个单元格里。再替换b2的值
可以通过openpyxl或解析解压的文件提取
整体思路为:
graph TB
A(excel文件)--->B(xlsx文件)
A(excel文件)--->C(xls文件)
B-->B1(openpyxl)
B1-->B2(unzip)
B2-->B3(cellImage mapping)
B2-->B4(drawing mapping)
B1(openpyxl)-->b1(ws._images)
C-->C1(pandas+engine xlrd)
C1-->B2(unzip)
测试
1. openpyxl.image
from openpyxl import load_workbook
file = '/Users/txmmy/my-python-projects/table-analysis/images_parse/excel_img_parse/img-file/联想电池.xlsx'
# 加载Excel文件
wb = load_workbook(file)
# 选择工作表
ws = wb.active
# 遍历工作表中的所有图片
for img in ws._images:
print(img)
print("图片提取完成!")
联想电池.xlsx\联想电池-wps.xlsx:
<openpyxl.drawing.image.Image object at 0x12368d5d0>
图片提取完成!
用这个方法提取的是悬浮式的,提取不到公式嵌入的
pandas