Преобразование файла .csv в 2-мерный массив в памяти Excel VBA - PullRequest
0 голосов
/ 18 июня 2020

У меня есть файл .csv, который выглядит следующим образом:

Unit,,PU,,,,,Start Date & Time,,,5/20/2020 17:32,,

Name,,PNR15.5,,,,,,,,,,

ID,,TEST52020,,,,,End Date & Time,,,,,

No.,,77,,,,,,,,,,

,,,,,,,,,,,,

Phase name,,Start Time,,End Time,,,,,,,,

C,,,,,,,,,,,,

S,,,,,,,,,,,,

Я пытаюсь преобразовать его в двумерный массив в памяти Excel VBA, на который можно ссылаться из ячеек Excel.

Существуют сотни файлов CSV.

Я пробовал построчно, но строка element2 (k, l) выдает ошибку.

Dim ArrayOfElements As Variant
Dim line, element, element2() As Variant
Dim k, l as Integer
k=0
Do While filename <> vbNullString
    Open path & filename For Input As #1
            
    Do While Not EOF(1)
        Line Input #1, line
        
        ArrayOfElements = Split(line, ",")
        k = k + 1
        l = 1
        For Each element In ArrayOfElements
            element2(k, l) = element
        l = l + 1
        Next
    Loop
    Close #1
Loop

В конце концов, я хочу : Ячейки (1,1). Значение = element2 (1,1).

1 Ответ

0 голосов
/ 19 июня 2020

Я бы по-прежнему рекомендовал читать файл на скрытом временном листе, а затем прямо в массив (например, ArrayOfElements = myRange), но с использованием варианта вашего существующего кода, вот пример использования объекта Collection для промежуточного хранения:

    Open Path & Filename For Input As #1
    Set col = New Collection

    Do While Not EOF(1)
        Line Input #1, line
        col.Add Split(line, ",") 'Note that Split results in a 0-based array
    Loop
    Close #1


ReDim ArrayOfElements(1 To col.Count, 1 To UBound(col(1)) + 1)
l = 0

For Each element In col
    l = l + 1
    For k = 0 To UBound(element)
        ArrayOfElements(l, k + 1) = element(k)
    Next k
Next element

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...