自动化办公 | (升级版)批量将Excel中的url链接转成图片②

《自动化办公 | (升级版)批量将Excel中的url链接转成图片②》

大家好,我是小五????

前面我们使用python批量将Excel中的url链接转成图片,结果读者后来跟我反馈又遇到了一些问题。

于是乎,干脆对前几天的代码升级一波。

需求简介

具体原始数据和期望结果如下图所示:

《自动化办公 | (升级版)批量将Excel中的url链接转成图片②》

但这位读者朋友又遇到了一个问题????

《自动化办公 | (升级版)批量将Excel中的url链接转成图片②》

  • 解决当url为空时代码停止运行的问题

  • 将图片保存到新增文件夹,大概有1.4W张图片,后续删图片有难度

第一个问题呢,只需加个判断语句就可以。至于将图片保存到新增文件夹,修改保存路径就可以解决了。

但是1.4w张图片下载到本地确实太麻烦了。经过@小明哥 的指导,其实我们下载图片到内存,完全不用再把图片下载到本地啦。

操作代码

本次升级除了解决被提出的两个问题,还有小五自己觉得不满意的地方。

等比例缩放图片

比如图片变形问题:

《自动化办公 | (升级版)批量将Excel中的url链接转成图片②》

从上图可以看到,之前代码运行后会给图片设置了固定尺寸72。但有些图片本身并不是正方形的,这就会导致插入后图片变形。

所以在@小明哥 的指导下,又构造了一个函数用来等比例缩放图片。

def img_resize(width, height):
    if width > height:
        height = height*72//width
        width = 72
    else:
        width = width*72//height
        height = 72
    return width, height

解决了这个问题,再说说如何将图片下载到内存。

下载到内存

StringIO经常被用来作字符串的缓存,因为StringIO的一些接口和文件操作是一致的,也就是说同样的代码,可以同时当成文件操作或者StringIO操作。

StringIO的行为与file对象非常像,但它不是磁盘上文件,而是一个内存里的“文件”,我们可以将操作磁盘文件那样来操作StringIO[1]。我们这里对它的具体用法如下:

import io
res = requests.get(url)
img = Image(io.BytesIO(res.content))

我们还可以顺便查看图片的格式

print(img.format)   # 获取图片的格式

《自动化办公 | (升级版)批量将Excel中的url链接转成图片②》

其余代码

为了方便大家查看,关键代码都进行了注释。如果对某些操作处理不理解,可以查看上一篇文章《批量将Excel中的url链接转成图片》

for cell, in ws["B2:B6"]:
    url = cell.value
    print(url)
    if url == None:
        continue
    # 删除超链接
    cell.hyperlink = None
    # 删除内容
    cell.value = ""
    # 设置行高
    ws.row_dimensions[cell.row].height = 54
    # 下载图片到内存
    res = requests.get(url)
    img = Image(io.BytesIO(res.content))
    
    # 等比例缩放图片
    width, height = img_resize(img.width, img.height)
    img.width = width
    img.height = height
    # 添加图片到指定单元格
    ws.add_image(img, f'B{cell.row}')
    
wb.save('结果文件.xlsx')

运行结果:

《自动化办公 | (升级版)批量将Excel中的url链接转成图片②》

成功完成需求????

参考资料

[1]

Python3-StringIO和BytesIO的总结: https://blog.csdn.net/yang_bingo/article/details/84066217

《自动化办公 | (升级版)批量将Excel中的url链接转成图片②》

    原文作者:朱小五是凹凸君呀
    原文地址: https://blog.csdn.net/zhuxiao5/article/details/116549481
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞