自动化办公 | 您所在的位置:网站首页 › 怎么提取excel的图片 › 自动化办公 |
大家好,我是小五? 关于自动化办公,之前我思考过好久。到底什么是自动化办公,哪些属于能真正提高我们工作效率的知识,哪些所谓的python自动化办公项目又是伪需求? 其实挺难断定的,可能大部分人用不到的一个功能,对于刚需的人却是救命稻草! 比如今天的这个需求? 案例需求一个群友在交流群里提出了这样一个问题 ![]() 这是他给出的示例文件,其中F列的商品编码,G列是商品图片。希望能够将G列的图片提取出来,并以同行的F列商品编码命名。 ![]() 下面给大家讲讲,如何轻松提取Excel的图片? 最简单的解决办法其中最简单的办法就是:将原Excel文件后缀名改为压缩包格式(zip、rar等) ![]() 这时候只需要解压此压缩包,再依次打开【xl】→【media】文件夹,就可以看到一堆图片。 ![]() 这些图片就是原本Excel中插入的图片。 是不是很简单?网上python自动化提取Excel中图片的方法,其基本原理也是一样的。 所以大家如果遇到了这种需求,不妨先试试这种方法(包括在Word中提取图片也是同理) 但是这种解决办法在本案例中并不适用。 为什么呢? 整个Excel中有重复的图片,这就会导致压缩包解压后的图片会自动去重,这样我们就没办法给图片匹配命名。 ![]() 一共126行商品数据,但解压后只提取出了112张图片。 下面继续带大家尝试用不同办法解决这个问题? VBA 方法有群友给出了VBA的解法: 先看实现的效果动图 ![]() 这里公布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中的数值,但是对于单元格里的图片就束手无策了。 毕竟它是浮动的。 ![]() 这里我们需要再安装一个库——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列商品编号作为图片名保存即可。 ![]() 运行后的结果 可以看到,标注圈出的图片原本是相同的,但仍然被命名为对应的商品编号,这样我们最终提取并命名的图片也就是126张。 说明我们同样解决了这个需求! 所以无论VBA还是python,只要能真正解决我们实际问题的,都是自动化办公的好帮手。 |
CopyRight 2018-2019 实验室设备网 版权所有 |