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

场景

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

实现

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

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、可能图片格式不符合,读取不到

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值