Excel 自动批量获取图片并填充单元格

很多公司都没有专门的系统来管理商品的图片,所以做商品管理和分析的朋友都习惯把商品图片导入到 Excel 中进行管理,或者用于配合 Excel 做报表展示。

虽然 Excel 可以批量导入图片,但导入后图片不会自动对齐单元格,各图片尺寸不一,靠纯手工去调整,耗时耗力,管理起来超级不方便!

这时候 VBA 就是最佳的工具了,打开 Excel 就能用,虽然它很老,但是有些场景它真的真的很好用 ~ 不会写 VBA 代码的朋友不用担心,因为代码我都已经写好了,你只要会用代码,会做一些简单修改就行,试试看,这肯定难不到你的!

从文件夹导入单元格

我们的商品图片一般是存放在电脑上,然后在 Excel 中一般是通过商品名称(图片文件名)来导入:

这时就可以使用以下代码:

Public Sub GetImagesFromFolder()

    '作用: 根据图片名称,插入图片到 Excel 单元格,图片位置在名称右侧的单元格中
    '代码运行中,若想要中断执行,可以在 VBA 界面按键盘快捷键[Ctrl] + [Pause Break]

    Dim folder As String, picExtention As String
    Dim picNames As Range, picName As Range, counter As Long, picPath As String

    folder = "C:\Users\Administrator\Downloads\Excel 导入导出图片\图片" '文件夹路径
    picExtention = "jpg" '图片扩展名,如果有多种格式,建议先用其他工具统一调整
    Set picNames = ActiveSheet.Range("A2:A9") '图片名称所在的单元格区域

    If Right$(folder, 1) <> "\" Then folder = folder & "\"
    If Left(picExtention, 1) <> "." Then picExtention = "." & picExtention

    On Error Resume Next '忽略错误,如找不到文件、空单元格等
    Application.ScreenUpdating = False
    For Each picName In picNames
        With picName.Offset(, 1) '图片存放于右侧的单元格中,1 表示偏移 1 列
            picPath = folder & picName.Value & picExtention '组合获取图片文件全路径
            ActiveSheet.Shapes.AddPicture(picPath, 1, 1, .Left, .Top, _
                .Width, .Height).Placement = xlMoveAndSize
            If Err.Number = 0 Then '记录反馈, 不需要的话可以删除
                .Offset(, 1).Value = "成功"
                counter = counter + 1
            Else
                .Offset(, 1).Value = Err.Description
                Err.Clear
            End If
        End With
    Next

    Application.ScreenUpdating = True
    MsgBox "图片链接共 " & picNames.Count & " 个,已成功获取 " & counter & " 个!", _
        vbOKOnly Or vbInformation, "温馨提示"

End Sub 代码中我都加了注释,大家根据自己的实际情况,修改文件夹路径扩展名图片名称所在的单元格区域等,即可实现自动导入图片:

从文件夹导入为图片批注

有时我们不想图片占用单元格区域,就可以导入为图片批注。对的,平时我们做的大多是文本批注,但其实图片也可以用作批注!

当你移动光标到单元格上方,或者选中单元格,批量就会自动显示出来。

我觉得图片批注的好处是排版方便,毕竟不同的商品尺寸不一,如果统一放在单元格区域内,你可能还要调整成不同的行高,这样其实报表的观感也比较一般 ~

插入图片作为批注,可以使用以下的代码:

Public Sub GetImagesFromFolderToComment()

    '作用: 根据图片名称,插入图片到 Excel 单元格的【批注】中,批注默认创建在名称所在的单元格
    '代码运行中,若想要中断执行,可以在 VBA 界面按键盘快捷键[Ctrl] + [Pause Break]

    Dim folder As String, picExtention As String, picPath As String
    Dim picNames As Range, picName As Range, counter As Long, scaleValue As Integer

    folder = "C:\Users\Administrator\Downloads\Excel 导入导出图片\图片" '文件夹路径
    picExtention = "jpg" '图片扩展名,如果有多种格式,建议先用其他工具统一调整
    scaleValue = 2.5 '设置图片的缩放倍数, 1 表示按默认尺寸显示
    Set picNames = ActiveSheet.Range("A2:A9") '图片名称所在的单元格区域

    If Right$(folder, 1) <> "\" Then folder = folder & "\"
    If Left(picExtention, 1) <> "." Then picExtention = "." & picExtention

    'On Error Resume Next '忽略错误,如找不到文件、空单元格等
    Application.ScreenUpdating = False

    For Each picName In picNames
        With picName '图片存放于右侧的单元格中
            Debug.Print .Value
            picPath = folder & picName.Value & picExtention '组合获取图片文件全路径

            .ClearComments '清空原有的批注
            With .AddComment.Shape '新建批注
                .Parent.Text ("") '清空默认批注内容
                .Parent.Visible = False '确保批注默认是隐藏的
                .Fill.UserPicture (picPath) '插入图片批注
                .LockAspectRatio = True '锁定长宽比
                .Width = scaleValue * .Width '设置图片的缩放倍数
            End With

             '记录反馈
            If Err.Number = 0 Then
                .Offset(, 2).Value = "成功"
                counter = counter + 1
            Else
                .Offset(, 2).Value = Err.Description
                Err.Clear
            End If

        End With
    Next

    '输出反馈
    Application.ScreenUpdating = True
    MsgBox "图片名称共 " & picNames.Count & " 个,已成功设置批注 " & counter & " 个!", _
        vbOKOnly Or vbInformation, "温馨提示"

End Sub

这里需要修改的地方包括:文件夹路径、图片扩展名、缩放倍数、图片名称所在单元格区域等,适当修改就能让你批量地生成图片批注,超级方便!

从图片链接导入Excel

还有些有做电商平台店铺的朋友,图片都上传到网店上了,需要根据图片链接获取图片到 Excel 工作表中:

有图片链接,需要导入图片到Excel中

这时可以使用以下的代码:

Public Sub GetImagesFromLinks()

    '作用: 根据图片链接地址,插入图片到 Excel 中,图片位置在链接单元格右侧的单元格中
    '代码运行中,若想要中断执行,可以在 VBA 界面按键盘快捷键[Ctrl] + [Pause Break]

    Dim link As Range, Links As Range, counter As Long
    Set Links = ActiveSheet.Range("A2:A9") '链接所在的单元格区域

    On Error Resume Next '忽略错误,如链接错误、网络问题、空单元格等
    Application.ScreenUpdating = False
    For Each link In Links
        With link.Offset(, 1) '图片存放于右侧的单元格中

            '插入图片
            ActiveSheet.Shapes.AddPicture(link.Value, 1, 1, .Left, .Top, _
                .Width, .Height).Placement = xlMoveAndSize

            If Err.Number = 0 Then '记录反馈
                .Offset(, 1).Value = "成功"
                counter = counter + 1
            Else
                .Offset(, 1).Value = Err.Description
                Err.Clear
            End If

        End With
    Next

    Application.ScreenUpdating = True
    MsgBox "图片链接共 " & Links.Count & " 个,已成功获取 " & counter & " 个!", _
        vbOKOnly Or vbInformation, "温馨提示"

End Sub

这个代码需要修改的地方比较少,主要就是设置链接所在的单元格区域,然后就可以正常使用了!导入来的图片自动会对齐单元格边框,并且随单元格的变化而变化,方便调整行高与列宽以适合不同的图片比例。

批量删除选中区域内的图片

Sub DelPicByRng()
'删除指定单元格区域内的图片
Dim i As Integer, shps
Set rng = ActiveSheet.Range(Selection.Address)
Set shps = rng.Worksheet.Shapes
For i = shps.Count To 1 Step -1 '倒序循环图片
If Not Intersect(shps(i).TopLeftCell, rng) Is Nothing Then '检测到图片位置与本区域重叠 则删除
shps(i).Delete
End If
Next i
End Sub

最后

在 Excel 里管理图片,如果靠手工确实是很麻烦的,掌握一些 VBA 知识会让你效率起飞!初学不用担心难度,因为你并不需要自己写 VBA ,只要会使用别人写好的代码,就能让你的工作效率大大提升,这才是最实用的!好,希望文中的内容对你有帮助。

点赞

发表回复

电子邮件地址不会被公开。必填项已用 * 标注