2016-05-01 5 views
0

EDIT: Этот код для загрузки изображений из файла xls нашел этот код. Источник: GET pictures from a url and then rename the pictureЗагрузить изображения из каталога CSV/XLS

Код:

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, где "ПИК NAME" и "URL" в двух отдельных столбцах. У меня есть файл csv и, в отличие от xls, csv имеет его значения в одном столбце, разделенном на «|» (PIC NAME | URL). Таким образом, когда я был в кодировке noob, в качестве обходного пути я использовал «Текст для столбцов» в Excel, чтобы разделить строки на два отдельных столбца справа от разделителя «|», таким образом я могу использовать исходный код.

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

+1

Пожалуйста, удалите ворс - приветствия не должны быть включены в этот вопрос, это Q & Сайт, а не форум. Кроме того, опишите, что вы пробовали, и какова ваша проблема. В настоящее время этот вопрос не касается какой-либо проблемы программирования, а «Пожалуйста, напишите весь код для меня», для чего это не тот сайт. – Polygnome

+0

На самом деле предложение с этого сайта http://stackoverflow.com/questions/15641717/download-files-pdf-from-web1 показывает, как это сделать. –

+0

Можете ли вы рассказать нам, что ваши исследования дали до сих пор? Поиск Google для «* vba download file *» привел меня к https://stackoverflow.com/questions/17877389/how-do-download-a-file-using-vba-without-internet-explorer. Вы пробовали это? Точно так же поиск «* vba loop lines in file *» дает много полезных (Stack Overflow) решений для чтения содержимого файла. Если у вас все еще есть проблемы с этим, вы должны перефразировать свой вопрос, чтобы уточнить, что именно не работает для вас. – Leviathan

ответ

0

Поскольку VBA обеспечивает автоматизацию для Excel, все, что вы можете сделать вручную, также может быть автоматизировано с помощью VBA. В Excel есть встроенный макрокорректор, который автоматически преобразует все действия пользователя в код VBA. Этот ответ объясняет, как это работает: Excel's Macro-Recorder usage

Это можно использовать, чтобы узнать, какой код 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

+0

Я попытался записать макрос, когда я вручную применил «Текст к столбцам» в A1, а затем добавил полученный код в исходный скрипт. Весь процесс не особенно быстрый. Я рассмотрю альтернативное решение, которое вы предложили, и посмотрите, могу ли я придумать более эффективный мод для исходного кода. –