Загрузка изображений из каталога CSV / XLS

РЕДАКТИРОВАТЬ:
Я нашел этот код для загрузки изображений из файла xls.
Источник: получение изображений из url-адреса, а затем переименовать изображение

Код:

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). So-being a noob at coding-as a workaround, I used «Text to columns» in Excel to divide the lines into 2 separate columns right down the delimiter»|», that way I can use the original code.

Вопрос: есть ли способ заставить код работать с csv-файлом? Это позволит намного быстрее и проще извлекать изображения из больших csv-файлов с тысячами строк.

1 ответ

  1. Поскольку VBA обеспечивает автоматизацию для Excel, все, что вы можете сделать вручную, также может быть автоматизировано VBA. Excel даже имеет встроенный регистратор макросов, который автоматически преобразует все действия пользователя в код VBA. Этот ответ объясняет, как это работает: использование записи макросов Excel

    Это можно использовать, чтобы увидеть, какой код VBA генерирует функция Text to columns. Если вы очистите код немного, вы закончите с этой командой VBA:

    Selection.TextToColumns Destination:=Range("A1") _
                          , DataType:=xlDelimited _
                          , Other:=True _
                          , OtherChar:="|"
    

    УбедитесьSelection, что вы заменили весь диапазон, импортированный в Excel, или выбрали весь диапазон перед выполнением кода. Также замените Range("A1")диапазон, в который вы хотите записать результат.

    Следует отметить, однако, что не очень эффективно записывать материал в ячейки excel только для последующего анализа этих ячеек. Более чистым решением вашей проблемы было бы читать загруженный файл строка за строкой и анализировать каждую строку в соответствии с вашими потребностями.

    К счастью, для этого уже есть решение: читать строки из текстового файла, но пропускать первые две строки