Excel将URL转换为图像(1004)

3

我有一个与SQL数据库连接的Excel文档,其中包含几列图像URL。

其中一个URL看起来像这样: https://imissit.blob.core.windows.net/iris/596480cf967e0c990c37fba3725ada0c/814040e2-0ccb-4b05-bdb3-d9dc9cc798d9/texture.png https://imissit.blob.core.windows.net/iris/596480cf967e0c990c37fba3725ada0c/814040e2-0ccb-4b05-bdb3-d9dc9cc798d9/texture.png

我在Excel文件中使用宏找到了不同的方法和方法,以将这些URL转换为图像(例如 Excel VBA Insert Images From Image Name in Columnhttps://superuser.com/questions/940861/how-can-i-display-a-url-as-an-image-in-an-excel-cell)。我尝试了这些方法,但对于我的URL类型都不起作用。 我尝试了其他URL(网络上的随机图像,http和https以及这些图像),结果都是可以正常工作的。

以下是我尝试过的其中一段代码,适用于其他图像:

   Sub InstallPictures()
    Dim i As Long, v As String
    For i = 2 To 2
        v = Cells(i, "O").Value
        If v = "" Then Exit Sub
        With ActiveSheet.Pictures
            .Insert (v)
        End With
    Next i
End Sub

在尝试使用我的URL时,我得到了一个运行时错误1004:无法执行图片对象的插入方法(翻译)。不同的方法会导致略微不同的运行时错误(虽然1004是一致的)。

这里是一些我尝试过的有效图像URL:

https://docs.oracle.com/cd/E21454_01/html/821-2584/figures/HTTPS_Collab_Sample.png

http://www.w3schools.com/css/paris.jpg

https://scontent.ftxl1-1.fna.fbcdn.net/v/t1.0-9/13043727_278733959131361_2241170037980408109_n.jpg?oh=bec505696c5f66cde0cc3b574a70547c&oe=58CC35C5

我的URL与其他URL有何不同?为什么这些方法不起作用?正确的方法是什么?


这段代码只有大约125个字符长度。我会尝试找到另一张长度类似的图片。 - 4ndro1d
1
尝试使用.Insert Trim(v) -- 如果存在前导/尾随空格,可能会导致无效的URL并引发1004错误。 - David Zemens
1
“problem”链接的HTTP响应代码为206(“部分内容”,https://httpstatuses.com/206),而正常工作的链接都是200(成功)。这可能是问题所在。 - Tim Williams
1
抱歉 - 没有修复的想法:只是指出可能是问题的根源。 - Tim Williams
我在Excel 2016中遇到了类似的问题。问题似乎是Excel在发送实际的“GET”请求之前发送了一个HTTP“OPTIONS”和/或“HEAD”请求(至少在我的跟踪中是这样)。如果服务器无法处理这些请求,则响应将是“405方法不允许”的响应,这会导致VBA错误。有趣的是,它在3-4周前对我有效,但突然停止工作了。 - Kurt Ludikovsky
显示剩余12条评论
1个回答

2
据我所知,问题(至少在我看来)不在于您的设备,而是在托管图像的服务器上,它无法返回文档。我不确定 Tim 上面提到的(涉及 206 响应代码)来自何处,但如果是这种情况,或者如果 URL 返回某些错误代码,则您的 VBA 也会失败,并且如果问题出现在主机上,您可能 无法解决 这个问题。
今天我手动输入 URL 并下载文件,没有问题。
我检查了 响应代码,它正确返回 200(成功)。

enter image description here

此时你唯一能做的就是捕获错误,并将其标记为稍后审查。
在我的测试中,我使用了一些故意糟糕的 URL,只是为了确保错误处理按预期工作。这些是我遇到的唯一失败的 URL。

enter image description here

以下是我使用的代码,仅稍微修改了一下,并包含一个错误处理程序,以向单元格添加注释,指示哪些 URL 返回错误。这样,您以后可以手动审查并添加那些图像(如果需要)。
Sub InstallPictures()
    Dim i As Long
    Dim v As String
    Dim cl As Range
    Dim pic As Shape
    Dim errors As New Collection

    i = 2
    Set cl = Cells(i, 15)
    Do While Trim(cl.Value) <> vbNullString
        v = Trim(cl.Value)
        cl.ClearComments

        With ActiveSheet.Pictures
            On Error GoTo ErrHandler
            Set p = .Insert(Trim(v))
            On Error GoTo 0
            ' I added this code to resize & arrange the pictures
            ' you can remove it if you don't need it
            p.TopLeftCell = cl.Offset(0, -1)
            p.Top = cl.Offset(0, -1).Top
            p.Left = cl.Offset(0, -1).Left
            p.Height = Cells(i, 15).Height
            p.Width = Cells(1, 15).Width
            '''''''''''''''''''''''''''''
        End With

NextCell:
        i = i + 1
        Set cl = Cells(i, 15)
    Loop

    If errors.Count > 0 Then
        MsgBox "There were errors, please review the comments as some files may need to be manually downloaded"
    End If

    Exit Sub


ErrHandler:
    Call ErrorNote(v, cl, errors)
    Resume NextCell
End Sub

Private Sub ErrorNote(url$, cl As Range, ByRef errs As Collection)
' Adds an item to the errs collection and flags the offending
' cell with a Comment indicating the error occurred. 
    On Error Resume Next
    errs.Add (url)
    With cl
        .ClearComments
        .AddComment ("Error with URL: " & vbCrLf & url)
    End With
End Sub

URL评论出现错误 - 没有其他信息 :( 我真的不明白 ^^ 这是我的截图:https://s17.postimg.org/zfd6bw17z/Capture.png - 4ndro1d
它正在工作。在我妻子的笔记本电脑上...我真的不知道为什么,因为它基本上是与我的相同型号,运行相同的软件。唯一的区别是登录的Microsoft帐户。如果我有时间,我会尝试确认一下... - 4ndro1d

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接