Python批量提取Excel中图片并按某列重命名

您所在的位置:网站首页 excel怎么批量导入图片名称和内容 Python批量提取Excel中图片并按某列重命名

Python批量提取Excel中图片并按某列重命名

2024-07-13 15:56| 来源: 网络整理| 查看: 265

场景

客户发了一个物料列表,里面有物料编码、物料名称、图片等信息,有一万多行数据,希望我们能把图片导入到金蝶云星空的物料列表中。

实现

金蝶云星空是有导入图片的功能,尝试了一下可用。所以分以下步骤去实现批量导入。

1、从Excel中提取图片(本文实现)

为了第二步不一次性导入过多的物料,先对Excel分成多张表后再提取。

2、按云星空导入图片功能的Excel模板整理格式

from openpyxl import load_workbook from openpyxl_image_loader import SheetImageLoader path = r'F:\导出图片\\' # Excel文件路径 saveDir = "F:\导出图片\\" # 图片存储路径 wb = load_workbook(path + '你的文件名.xlsx') # Excel文件名 ws = wb['Sheet1'] #你的工作簿 image_loader = SheetImageLoader(ws) num = ws.max_row # 总行数 for i in range(2, num+1): # 从第2行开始,总行数要+1 try: name = ws['E'+str(i)].value # 文件名所在的列 image = image_loader.get('D'+str(i)) # 列的图片 image.save(saveDir + name + ".jpg") # 排除没有图片,或图片超出单元格的情况 except ValueError: print("这一行没有图片:" ,i)

报错,OSError: cannot write mode P as JPEG

我这里只要不是rgb就转成rgb。这样就能全部保存成.jpg格式,方便我后面整理。有些不能转换的就只能保存成.png格式。

改了一通没有报错了,但发现有几种情况不报错、也不保存图片:1、格式是JPEG格式存不下来先转换一下再保存。2、单元格里不是图片,是文字......(不知道客户咋想的,放个文字)

修改后代码如下:

from openpyxl import load_workbook from openpyxl_image_loader import SheetImageLoader path = r'F:\导出图片\\' # Excel文件路径 saveDir = "F:\导出图片\\" # 图片存储路径 wb = load_workbook(path + '1-200.xlsx') # Excel文件名 ws = wb['Sheet1'] #你的工作簿 image_loader = SheetImageLoader(ws) num = ws.max_row for i in range(2, num+1): # 从第2行开始,总行数要+1 try: name = ws['E'+str(i)].value # 文件名 image = ws['D' + str(i)].value # 单元格内有文字 if image != None: print("这一行是文字:" ,i) else: image = image_loader.get('D'+str(i)) # 列的图片 gs=image.format if gs =='PNG': image.save(saveDir + name + ".PNG") elif gs == 'JPEG': #图片是JPEG格式,先转换 image.convert('RGB') image.save(saveDir + name + ".PNG") # 排除没有图片,或图片超出单元格的情况 except ValueError: print("这一行没有图片:" ,i)

Excel表如下:

提取后的结果如下

一些可能导致异常的情况

1、可能图片超出单元格,导致读取不到

调整图片在单元格内

2、可能该单元格内没有图片或单元格内是文字

3、可能图片格式不符合,读取不到



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3