前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自动化办公 | 批量将Excel中的url链接转成图片

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

作者头像
朱小五
发布2021-05-07 11:29:14
3.8K0
发布2021-05-07 11:29:14
举报
文章被收录于专栏:凹凸玩数据凹凸玩数据

大家好,我是小五?

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

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

需求简介

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

同时还有两点要求

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

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

操作代码

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

下载图片

代码语言:javascript
复制
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

插入图片

代码语言:javascript
复制
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,是为了满足要求第②点:将下载的图片尺寸固定下来。

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

代码语言:javascript
复制
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. 调用函数插入图片

执行代码,得到结果

成功完成需求?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-05-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 凹凸数据 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 需求简介
  • 操作代码
    • 下载图片
      • 插入图片
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档