获取CSV中的图片链接,并下载保存到对应文件夹中
本帖最后由 kaijie117 于 2024-11-23 16:02 编辑获取CSV中第AE列(第31列)每行数据为图片链接
获取第C列(第3列)每行数据,作为文件夹名称
其中每行单元格包含多个图片链接,它们使用,隔开
下载到对应C列数据的文件夹中,图片文件名保留原文件名
举例
C列 AE列
TEST https://cdn-fusion.imgcdn.store/i/2024/bd462b3f96eaca92.jpg,https://cdn-fusion.imgcdn.store/i/2024/9b317940dca5fc26.png
保存结果
文件夹TEST
包含图片
bd462b3f96eaca92.jpg
9b317940dca5fc26.png
图片类型:webp,jpg,png 等几种常见的图片格式
若某行的AE列没有图片链接则跳过该行.
感谢{:17_1077:} 写了个powershell脚本(类似于bat批处理脚本)https://x.ws28.cn/f/fn0xkvz9bal 复制链接到浏览器打开
1、下载后放到和你的CSV文件同级文件夹下,右键,用记事本打开,按照下面的图片改一下内容,
改一下csv文件名,第3列的列名,第31列的列名
https://www.helloimg.com/i/2024/11/23/6741960846292.png
我测试用的test.csv
https://www.helloimg.com/i/2024/11/23/6741966804a6e.png
2、保存后,右键,选择”使用 PowerShell 运行“。 个人已经尝试了直接在csv中编写对应vb代码有效性,其中有一些前提条件:
1. 数据在第一个表格
Set ws = ThisWorkbook.Sheets(1) ' 假设数据在第一个工作表
2. 数据是从第一行开始的,也就是没有标题数据,若不是可以更改代码中对应数字即可
For i = 1 To lastRow ' 假设数据从第1行开始
接下来是所有代码,可直接在csv文件中运行
Sub DownloadImagesFromCSV()
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Dim folderName As String
Dim imageLinks As String
Dim links() As String
Dim link As String
Dim fileName As String
Dim imgFolderPath As String
Dim currentDir As String
Dim linkIndex As Long
Dim imgPath As String
currentDir = ThisWorkbook.Path
' 当前工作表
Set ws = ThisWorkbook.Sheets(1) ' 假设数据在第一个工作表
' 获取最后一行
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
' 遍历每一行数据
For i = 1 To lastRow ' 假设数据从第1行开始
folderName = ws.Cells(i, 3).Value ' 获取 C 列作为文件夹名
imageLinks = ws.Cells(i, 31).Value ' 获取 AE 列作为图片链接
' 如果 AE 列没有图片链接,跳过该行
If Len(Trim(imageLinks)) = 0 Then
GoTo SkipRow
End If
' 分割多个图片链接(以逗号分隔)
links = Split(imageLinks, ",")
' 如果 links 数组没有有效的图片链接,跳过该行
If UBound(links) < 0 Then
GoTo SkipRow
End If
' 创建相对路径的文件夹(如果不存在)
imgFolderPath = currentDir & "\" & folderName
If Dir(imgFolderPath, vbDirectory) = "" Then
MkDir imgFolderPath
End If
' 下载每个图片
For linkIndex = 0 To UBound(links)
link = Trim(links(linkIndex)) ' 获取当前链接
If link <> "" Then
' 获取图片的文件名(从链接中提取)
fileName = Mid(link, InStrRev(link, "/") + 1)
imgPath = imgFolderPath & "\" & fileName
' 调用 DownloadFile 函数来下载图片
Call DownloadFile(link, imgPath)
End If
Next linkIndex
SkipRow:
Next i
MsgBox "图片下载完成!"
End Sub
' 下载文件的函数
Sub DownloadFile(url As String, filePath As String)
Dim httpRequest As Object
Dim byteArray() As Byte
Dim fileNumber As Integer
' 创建 HTTP 请求对象
Set httpRequest = CreateObject("MSXML2.XMLHTTP")
' 发送 GET 请求
httpRequest.Open "GET", url, False
httpRequest.Send
' 检查请求是否成功
If httpRequest.Status = 200 Then
' 获取响应体(二进制数据)
byteArray = httpRequest.responseBody
' 获取文件号
fileNumber = FreeFile
' 打开文件进行写入
Open filePath For Binary Access Write As #fileNumber
' 写入数据
Put #fileNumber, , byteArray
' 关闭文件
Close #fileNumber
Else
MsgBox "下载失败,HTTP 状态码: " & httpRequest.Status, vbCritical
End If
End Sub
rootbot007 发表于 2024-11-23 10:31
个人已经尝试了直接在csv中编写对应vb代码有效性,其中有一些前提条件:
1. 数据在第一个表格
按照要求设置为第一个工作蒲.将For i = 1 To lastRow修改为 For i = 2 To lastRow
运行DownloadImagesFromCSV启动运行.秒提示图片下载成功.
查看目录,并未创捷文件夹和下载文件{:17_1082:} https://cdn-fusion.imgcdn.store/i/2024/1b9e8cb61525b2d3.png
运行前的设置,因为没有用过VB代码.不知道有没有错误 DetectiveConan 发表于 2024-11-23 02:34
写了个powershell脚本(类似于bat批处理脚本)https://x.ws28.cn/f/fn0xkvz9bal 复制链接到浏览器打开
1 ...
下载的时候能不能加个重试次数5次, 出现网络波动它就跳过了{:17_1077:} kaijie117 发表于 2024-11-23 17:58
下载的时候能不能加个重试次数5次, 出现网络波动它就跳过了
https://x.ws28.cn/f/fn1ht3xk1pm 复制链接到浏览器打开
第25行,$maxRetries = 5
现在是5次,你想几次就改成几次
页:
[1]