Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA:下载不带扩展名的文件,获取扩展名并将其添加到文件名_Excel_Vba - Fatal编程技术网

Excel VBA:下载不带扩展名的文件,获取扩展名并将其添加到文件名

Excel VBA:下载不带扩展名的文件,获取扩展名并将其添加到文件名,excel,vba,Excel,Vba,此VBA脚本使用列A作为文件名,B作为图像url,并添加.jpg作为扩展名 问题是许多文件不是JPG格式,所以最好考虑它们有未知的扩展。 是否可以调整脚本,使其在保存图像并将其添加到文件名而不是用户定义的.jpg之前获得真正的文件扩展名 剧本 Option Explicit '~~> This macro downloads images from urls. Column A=image title, Column B=image URL. Private Declare Functio

此VBA脚本使用列A作为文件名,B作为图像url,并添加.jpg作为扩展名

问题是许多文件不是JPG格式,所以最好考虑它们有未知的扩展。 是否可以调整脚本,使其在保存图像并将其添加到文件名而不是用户定义的.jpg之前获得真正的文件扩展名

剧本

Option Explicit
'~~> This macro downloads images from urls. Column A=image title, Column B=image URL.
Private Declare Function URLDownloadToFile Lib "urlmon" _
Alias "URLDownloadToFileA" (ByVal pCaller As Long, _
ByVal szURL As String, ByVal szFileName As String, _
ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long

Dim Ret As Long

'~~> This is where the images will be saved. Change as applicable
Const FolderName As String = "C:\Users\plus\Desktop\INPUT\"

Sub DOWNLOAD_image_XLS()
'~~> This is where text is divided into 2 columns right down the "|" delimiter
    Columns("A:A").Select
    Selection.TextToColumns Destination:=Range("A1") _
                      , DataType:=xlDelimited _
                      , Other:=True _
                      , OtherChar:="|"
    Dim ws As Worksheet
    Dim LastRow As Long, i As Long
    Dim strPath As String

    Set ws = ActiveSheet

    LastRow = ws.Range("A" & Rows.Count).End(xlUp).Row

    For i = 2 To LastRow '<~~ 2 because row 1 has headers
        strPath = FolderName & ws.Range("A" & i).Value & ".jpg"

        Ret = URLDownloadToFile(0, ws.Range("B" & i).Value, strPath, 0, 0)

        If Ret = 0 Then
            ws.Range("C" & i).Value = "OK"
        Else
            ws.Range("C" & i).Value = "Failed!"
        End If
    Next i
    End Sub

一种方法是从响应中解析内容类型:

子下载链接 常量imageLink=http://i.stack.imgur.com/9w2PY.png?s=32 Const filePath=C:\Temp\myimage Dim req作为对象,内容作为字节,扩展名$ '发送请求 Set req=CreateObjectMsxml2.ServerXMLHTTP.6.0 请求打开获取,图像链接,错误 请求发送 '获取扩展名和数据 扩展=Splitreq.getResponseHeaderContent-Type,/1 content=req.responseBody '写入文件 打开二进制访问写入为1的文件路径和扩展 放1,1,内容 关闭1 端接头
在哪里可以找到真正的文件扩展名?这是链接的一部分吗?然后,您可以使用split或mid以及InStrRev轻松地从中提取它。还是要编写代码来检查文件并查找可能的文件头?@Ralph没有指定真正的扩展名,这就是问题所在,大多数文件都是jpg、许多png和一些gif。理想的解决方案是您提到的后者,让脚本检查文件并获取其扩展名。这在VBA中可行吗?如前所述,使用现有库可以更轻松地做到这一点。但是,您当然也可以仅使用VBA来实现这一点。但是如果你想走这条路,那么你必须先自己写代码,我们可以帮你调试,或者付钱给别人帮你。或者,只需获得一个新的图片查看程序,该程序可以帮助您识别图片,而不考虑其扩展名。对于在Excel中使用VBA的.net实现,如上述问题的一个答案中所建议的,您可能需要查看以下内容:Genius!它得到了正确的扩展名。我会尽我最大的努力将这两个脚本合并在一起,并让您从我的csv文件中获取图像链接。谢谢!嗯,我不会编码,甚至不会读它=D。我最终下载了图像并保存它们,没有扩展名,然后使用TrID批处理添加文件扩展名。两个步骤而不是一个步骤,但它完成了任务。