自动化办公 | 快速从Excel中提取图片并匹配命名

Aidan075
• 阅读 2056

大家好,我是小五🐶

关于自动化办公,之前我思考过好久。到底什么是自动化办公,哪些属于能真正提高我们工作效率的知识,哪些所谓的python自动化办公项目又是伪需求?

其实挺难断定的,可能大部分人用不到的一个功能,对于刚需的人却是救命稻草!

比如今天的这个需求👇

案例需求

一个群友在交流群里提出了这样一个问题

自动化办公 | 快速从Excel中提取图片并匹配命名

这是他给出的示例文件,其中F列的商品编码,G列是商品图片。希望能够将G列的图片提取出来,并以同行的F列商品编码命名。

自动化办公 | 快速从Excel中提取图片并匹配命名

下面给大家讲讲,如何轻松提取Excel的图片👇

最简单的解决办法

其中最简单的办法就是:将原Excel文件后缀名改为压缩包格式(zip、rar等)

自动化办公 | 快速从Excel中提取图片并匹配命名

这时候只需要解压此压缩包,再依次打开【xl】→【media】文件夹,就可以看到一堆图片。

自动化办公 | 快速从Excel中提取图片并匹配命名

这些图片就是原本Excel中插入的图片。

是不是很简单?网上python自动化提取Excel中图片的方法,其基本原理也是一样的。

所以大家如果遇到了这种需求,不妨先试试这种方法(包括在Word中提取图片也是同理)

自动化办公 | 快速从Excel中提取图片并匹配命名

但是这种解决办法在本案例中并不适用。

为什么呢?

整个Excel中有重复的图片,这就会导致压缩包解压后的图片会自动去重,这样我们就没办法给图片匹配命名。

自动化办公 | 快速从Excel中提取图片并匹配命名

一共126行商品数据,但解压后只提取出了112张图片。

下面继续带大家尝试用不同办法解决这个问题👇

VBA 方法

有群友给出了VBA的解法:

先看实现的效果动图

自动化办公 | 快速从Excel中提取图片并匹配命名

这里公布VBA代码,刚兴趣的同学可以自己学习研究一下

Sub 导出图片()  
    On Error Resume Next  
    MkDir ThisWorkbook.Path & "\图片"  
    For Each pic In ActiveSheet.Shapes  
        If pic.Type = 13 Then  
            RN = pic.TopLeftCell.Offset(0, -1).Value  
            pic.Copy  
            With ActiveSheet.ChartObjects.Add(0, 0, pic.Width, pic.Height).Chart    '创建图片  
                .Parent.Select  
                .Paste  
                .Export ThisWorkbook.Path & "\图片\" & RN & ".jpg"  
                .Parent.Delete  
            End With  
        End If  
    Next  
End Sub  

既然VBA能实现,那自动化办公的另一个巨头——python哥也不能说不行啊。

Python方法

我们可以使用openpyxl来自动提取Excel中的数值,但是对于单元格里的图片就束手无策了。

毕竟它是浮动的。

自动化办公 | 快速从Excel中提取图片并匹配命名

这里我们需要再安装一个库——openpyxl-image-loader来搭配使用。顾名思义,它的功能就是从单元格获取图像,正好可以实现我们的需求。

表情包(真不错)

具体实现语句如下所示:

path = r'D:\python_code\\'  
saveDir = "图片/"  

wb = load_workbook(path + '待收集图片sku.xlsx')  
ws = wb['Sheet1']  
image_loader = SheetImageLoader(ws)  

num = ws.max_row  
for i in range(2,num+1):  
    name = ws['F'+str(i)].value  
    image = image_loader.get('G'+str(i))  
    image.save(saveDir + name + ".png")  

其中image_loader.get()函数就是用来获取单元格的图像,我们只需再将openpyxl获取的F列商品编号作为图片名保存即可。

自动化办公 | 快速从Excel中提取图片并匹配命名

运行后的结果

可以看到,标注圈出的图片原本是相同的,但仍然被命名为对应的商品编号,这样我们最终提取并命名的图片也就是126张。

说明我们同样解决了这个需求!

所以无论VBA还是python,只要能真正解决我们实际问题的,都是自动化办公的好帮手

数据&代码下载

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

自动化办公 | 快速从Excel中提取图片并匹配命名

精通Python自动化编程》全书共20章,第114章讲解Python编程基础知识,第15章介绍数据库、ORM框架SQLAlchemy的应用,第1620章分别介绍Selenium实现网页自动化、Requests实现网页爬虫编程、办公自动化编程、OpenCV实现图像识别与定位、Web系统的开发与部署。

本文转转自微信公众号凹凸数据原创https://mp.weixin.qq.com/s/-Snx-krvRyCcnnSOh888Nw,可扫描二维码进行关注: 自动化办公 | 快速从Excel中提取图片并匹配命名 如有侵权,请联系删除。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
盘点一个Python自动化办公的需求——一键批量插图到Excel指定单元格
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Python自动化办公的问题,问题如下:大佬们,昨天我在做插入excel图片的时候想起一个需求,好像挺难办的,也蛮现实的。比如每个图片是有名称的,但在做excel的时候,能不能按
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这