使用VBA将.csv字符串读取到多维数组中

使用VBA将.csv字符串读取到多维数组中

问题描述:

我试图自动将数据导入到我在Excel中创建的工具中。我们的想法是将.csv文件中的数据直接读入数组中,或者将数据作为字符串读取,然后使用空格“”和逗号“,”作为分隔符,然后是数组进行解析。这一步我已经得到了:使用VBA将.csv字符串读取到多维数组中

Public Sub ImportData() 
    Dim myData as String, strData() as String 
    Dim thisFile as String 

    thisFile = ActiveWorkbook.Path & "\" & "s.csv" 
    Open thisFile For Binary As #1 
    myData = Space$(LOF(1)) 
    Get #1, , myData 
    Close #1 
End Sub 

这让我到哪里“的myData”是现在逗号和空格(逗号划定了一个新的列,空间界定为一个新行)分隔的数据串。

如何继续将其重建为多维(2D)数组,以便它可以打印到正在处理的工作表上,或从内存中直接引用?还是有更简单的方法?

+0

斯普利特((那些真的不换行符 - 这将是一个CSV文件奇数格式)给你的“线阵列”。然后用逗号分隔每一行(假设您没有可能包含逗号的字段值?)以获取每行中的单个值。 –

+0

你确定你想要一个动态数组吗?换句话说,你是否想要两个以上的“列”数据?这对于CSV工作来说似乎很不寻常,除非您只是构建标题行和列。也许你想要一个具有两列数据的二维数组,但是是一个动态行?如果你发布了你拥有的字符串以及你希望数组包含的内容(例如strdata(0,0)= xx strdata(0,1)= xxxxx – PGCodeRider

+0

),那么在这里检查一个关于导入文本(csv)文件.... https://*.com/questions/10434335/text-file-in-vba-open-find-replace-saveas-close-file#10434907 – jsotola

这是空格)由@Tim建议实施

Option Explicit 

Public Sub OpenFile() 
    Dim rawData As String, lineArr As Variant, cellArr As Variant 
    Dim ubR As Long, ubC As Long, r As Long, c As Long 

    Open ActiveWorkbook.Path & "\" & "s.csv" For Binary As #1 
    rawData = Space$(LOF(1)) 
    Get #1, , rawData 
    Close #1 

    If Len(rawData) > 0 Then 

     'If spaces are delimiters for lines change vbCrLf to " " 
     lineArr = Split(Trim$(rawData), vbCrLf) 

     ubR = UBound(lineArr) + 1 
     ubC = UBound(Split(lineArr(0), ",")) + 1 
     ReDim arr(1 To ubR, 1 To ubC) 

     For r = 1 To ubR 
      If Len(lineArr(r - 1)) > 0 Then 
       cellArr = Split(lineArr(r - 1), ",") 
       For c = 1 To ubC 
        arr(r, c) = cellArr(c - 1) 
       Next 
      End If 
     Next 
     ActiveSheet.Range(Cells(1), Cells(ubR, ubC)) = arr 'Place array on the sheet 
    End If 
End Sub