大家好,我是小五🚀
最近在交流群看到了一个问题
小五对这个比较感兴趣,所以就要了示例数据找时间尝试做了一下。为啥感兴趣呢?因为前段时间刚帮群友做过一个相反的案例——将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')
代码注释:
- 获取A列的值,作为后续被下载图片的名字
获取B列的值,即待下载图片的url
下载图片到本地
将B列的值清空(设置为"")
设置当前行高为54(为了配合图片的尺寸)
调用函数插入图片
执行代码,得到结果
成功完成需求🚀
数据&代码下载
如果有小伙伴对本文的操作感兴趣,扫码👇关注「快学Python」在后台回复“图片2” ,即可获取全部案例数据和代码!
《人工智能数学基础》数学思维的体操、学习人工智能的基石!通过205个典型范例+185个推导公式+37道经典习题+40个学习难点提示+19个项目,进行数学思想和解决方案的有效实践。
本文转转自微信公众号凹凸数据原创https://mp.weixin.qq.com/s/m1lH8Vfa0-SXRR411ZskjA,可扫描二维码进行关注: 如有侵权,请联系删除。