编辑: 我发现此代码从xls文件下载图像。 资料来源:GET pictures from a url and then rename the picture
代码:
Option Explicit
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:\Temp\"
Sub Sample()
Dim ws As Worksheet
Dim LastRow As Long, i As Long
Dim strPath As String
'~~> Name of the sheet which has the list
Set ws = Sheets("Sheet1")
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 = "File successfully downloaded"
Else
ws.Range("C" & i).Value = "Unable to download the file"
End If
Next i
End Sub
它适用于xls文件,其中“PIC NAME”和“URL”位于两个单独的列中。我有一个csv文件,与xls不同,csv在一列中用“|”分隔它的值(PIC NAME | URL)。所以 - 在编码时作为一个菜鸟 - 作为一种解决方法,我在Excel中使用“Text to columns”将行分成两个单独的列,直到分隔符“|”,这样我就可以使用原始代码了。
问题:有没有办法让代码使用csv文件?这样可以更快更轻松地从包含数千行的大型csv文件中提取图像。
答案 0 :(得分:0)
由于VBA为Excel提供自动化功能,您可以手动执行的所有操作也可以由VBA自动完成。 Excel甚至集成了一个宏记录器,可以自动将所有用户操作转换为VBA代码。这个答案解释了它的工作原理:Excel's Macro-Recorder usage
这可用于查看 Text to columns 函数生成的VBA代码类型。如果您稍微清理代码,最终会得到这个VBA命令:
Selection.TextToColumns Destination:=Range("A1") _
, DataType:=xlDelimited _
, Other:=True _
, OtherChar:="|"
确保将Selection
替换为导入Excel的整个范围,或者在执行代码之前选择整个范围。同时将Range("A1")
替换为您希望将结果写入的范围。
应该注意的是,将内容写入excel单元并不是非常有效,只是为了解析那些单元格。解决问题的一个更简洁的方法是逐行读取下载的文件,并根据需要解析每一行。
幸运的是,已经有了解决方案:Read lines from a text file but skip the first two lines