excel宏-表格通过图片的网络路径下载展示图片

1、原理

通过图片的网络路径,将图片下载到本地,excel读取本地路径,显示图片。

注意:下载的图片路径改变将无法展示

2、准备

2.1、excel版本

MS_Office_2016

2.2、excel开启宏

选项 -》信任中心 -》 信任中心设置 -》 宏设置 -》启用所有宏

2.3、另存为宏文件

表格数据

另存为宏文件

3、宏编程

  • 打开宏文件

  • Alt + F11 : 打开宏编辑器,新建模块,复制以下代码

Sub DownloadAndShowImages()
    Dim ws As Worksheet
    Dim cell As Range
    Dim pic As Picture

    ' 修改为你的图片链接所在的工作表
    Set ws = ThisWorkbook.Sheets("Sheet1")
        
    For Each cell In ws.Range("C2:C" & ws.Cells(ws.Rows.Count, "C").End(xlUp).Row)
        ' 下载图片到本地缓存,使用第一列的内容作为文件名
        Dim fileName As String
        fileName = "C:\Temp\" & cell.Offset(0, -2).Value & ".jpg"
        DownloadImage cell.Value, fileName

        ' 在工作表中插入图片
        Set pic = ws.Pictures.Insert(fileName)

        ' 调整图片大小和位置,根据需要修改
        pic.Top = cell.Top
        pic.Left = cell.Offset(0, 1).Left
        pic.Width = 100 ' 修改为适当的宽度
        pic.Height = 100 ' 修改为适当的高度
    Next cell
End Sub

Sub DownloadImage(url As String, savePath As String)
    Dim objXML As Object
    Dim objHTTP As Object
    Dim oStream As Object

    ' 创建文件夹(如果不存在)
    If Dir("C:\Temp\", vbDirectory) = "" Then
        MkDir "C:\Temp\"
    End If

    Set objXML = CreateObject("MSXML2.ServerXMLHTTP")
    Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")

    objXML.Open "GET", url, False
    objXML.send ""

    If objXML.Status = 200 Then
        Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
        objHTTP.Open "GET", url, False
        objHTTP.send ""
        If objHTTP.Status = 200 Then
            Set oStream = CreateObject("ADODB.Stream")
            oStream.Open
            oStream.Type = 1
            oStream.Write objHTTP.responseBody
            oStream.SaveToFile savePath, 2 ' 1: 不覆盖, 2: 覆盖
            oStream.Close
        End If
    End If

    Set objXML = Nothing
    Set objHTTP = Nothing
    Set oStream = Nothing
End Sub
  • 保存关闭,Alt + F8, 选择宏执行

  • 结果下载图片,展示图片

posted @ 2024-01-19 15:11  pine007  阅读(41)  评论(0编辑  收藏  举报