河南南阳收割机被堵事件:官员缺德,祸患无穷

极目新闻领导公开“记者毕节采访被打”细节:他们打人后擦去指纹

突发!员工跳楼!只拿低保工资!央企设计院集体罢工!

退休后的温家宝

突发!北京某院集体罢工!

生成图片,分享到微信朋友圈

自由微信安卓APP发布,立即下载! | 提交文章网址
查看原文

自动化办公 | 批量将Excel中的url链接转成图片

朱小五 凹凸数据 2022-05-28

大家好,我是小五🚀

最近在交流群看到了一个问题

小五对这个比较感兴趣,所以就要了示例数据找时间尝试做了一下。为啥感兴趣呢?因为前段时间刚帮群友做过一个相反的案例——将Excel中的图片下载到本地

需求简介

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

同时还有两点要求

思考了一下,我选择了一个折中的办法,先依照B列的url链接将图片下载到本地,再将本地图片依次插入B列的原位置。

这次小五选择使用python,来完成本次的自动化办公任务。

操作代码

首先我们需要先构造两个函数,分别用来下载图片和插入图片。

下载图片

def download_img(url,file_name):
    res = requests.get(url)
    img = open(file_name, 'wb')
    img.write(res.content)
    img.close()

简单解释一下,requests发起get请求拿到图片的信息。

open打开文件,以file_name(比如111.jpg)为文件名,wb代表以二进制覆盖写。

  • res.text ==> 获取文本
  • res.content ==> 下载内容

这里我们下载图片使用res.content

插入图片

def insert_img(file_name,cell):
    img = Image(file_name)
    img.width,img.height=72,72
    ws.add_image(img, cell)

查阅openpyxl的官方文档可以找到“向Excel中插入图片的语法”👇

可以看到我们只需导入openpyxl子模块下面的Image类,调用函数ws.add_image(img, cell)就能插入图片。

另外我在中间加了一步:img.width,img.height=72,72将图片的宽和高都设置为72,是为了满足要求第②点:将下载的图片尺寸固定下来。

这样我们就构造好了两个函数,下面就可以来调用函数去处理需求了。

wb = load_workbook('将URL转变为图片并以Excel导出.xlsx')
ws = wb['原始数据']

for i in range(2,5):
    name = ws['A'+str(i)].value + '.jpg' ①
    url = ws['B'+str(i)].value ②
    download_img(url,name) ③
    ws['B'+str(i)]="" ④
    ws.row_dimensions[i].height=54 ⑤
    insert_img(name,'B'+str(i)) ⑥
    
wb.save('结果文件.xlsx')

代码注释:

  1. 获取A列的值,作为后续被下载图片的名字
  1. 获取B列的值,即待下载图片的url
  2. 下载图片到本地
  3. 将B列的值清空(设置为"")
  4. 设置当前行高为54(为了配合图片的尺寸)
  5. 调用函数插入图片

执行代码,得到结果

成功完成需求🚀

数据&代码下载

如果有小伙伴对本文的操作感兴趣,扫码👇关注「快学Python」在后台回复“图片2” ,即可获取全部案例数据和代码!



人工智能数学基础》数学思维的体操、学习人工智能的基石!通过205个典型范例+185个推导公式+37道经典习题+40个学习难点提示+19个项目,进行数学思想和解决方案的有效实践。点击下图可看详情/购买!👇

感谢北京大学出版社的支持!点击阅读原文 500币💰免费兑换!无套路包邮送书!

文章有问题?点此查看未经处理的缓存