01
我们在《如何批量获取Excel图片并准确重命名?》一文中提到一个场景,即excel表中至少有两列,一列是图片,另一列是对应的图片名称,我们希望批量地提取当中的图片,并根据对应列为图片重命名。为解决这个问题,我们提供了Python和VBA两种实现办法。该文还将Python脚本封装成小工具给大家下载使用。
02
本文则对上述场景做了一个闭环,即如何根据某列名称,批量导入对应名称的图片。如果不使用Python,那么常见的也有两种做法。
方法一:
步骤一:
将下方核心公式复制到需要添加图片的列:
代码语言:javascript复制="<table><img src=""G:Learning提取excel图片图片"&A3&".jpg""width=""180""height=""180"">"
步骤二:
桌面新建记事本,将上述D列复制过去,如下图所示:
步骤三:
复制记事本这几行,回到Excel,右键,选择性粘贴,选Unicode 文本即可。
点评:
好处:几乎不用代码,容易操作。
不足:可复用性低,每次要重复上述三步。
而且由于批量导入的图片尺寸是统一的,如果原图尺寸大小不一,就造成图片变形。
方法二:
使用VBA代码。核心代码如下:
代码语言:javascript复制 For k = Start_Row To Cnt
'插入图片
On Error Resume Next
F_jpg = Cells(k, Item_Col) & ".jpg"
F_png = Cells(k, Item_Col) & ".png"
F_default = "None.jpg"
If Dir(MyDir & F_jpg) <> "" Then
F = F_jpg
ElseIf Dir(MyDir & F_png) <> "" Then
F = F_png
Else
F = F_default
End If
Set pic = ActiveSheet.Pictures.Insert(MyDir & F)
'锁定高宽比
pic.ShapeRange.LockAspectRatio = True
'看高宽比。如果图片高宽比高,那么调整到单元格高度,否则调整到单元格宽度
With pic.ShapeRange
'如果图片高宽比比单元格大,说明图片太高,只需调整图片高度
If .Height / .Width > Cells(k, Pic_Col).Height / Cells(k, Pic_Col).Width Then
.Height = Cells(k, Pic_Col).Height - 2
'调整位置
.Top = Cells(k, Pic_Col).Top 1
.Left = Cells(k, Pic_Col).Left (Cells(k, Pic_Col).Width - .Width) / 2
'如果图片高宽比比单元格小,说明图片太宽,只需调整图片宽度
Else
.Width = Cells(k, Pic_Col).Width - 2
'调整位置
.Left = Cells(k, Pic_Col).Left 1
.Top = Cells(k, Pic_Col).Top (Cells(k, Pic_Col).Height - .Height) / 2
End If
End With
Next k
使用步骤:
点击下图【导入图片】按钮即可。导入的图片会根据单元格自动改变大小,但维持原有长宽比例。
点评:
好处:容易复用,最关键的是图片大小可以根据单元格大小自适应。
不足:如果图片被删除或切换了路径,那么该单元格将无法正常显示图片。
03
为方便大家学习,可在本公众号后台回复【导入图片】四个字,获得上述文档。文档还包含了图片批量导出的VBA。