使用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)数组,以便它可以打印到正在处理的工作表上,或从内存中直接引用?还是有更简单的方法?
答
这是空格)由@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
斯普利特((那些真的不换行符 - 这将是一个CSV文件奇数格式)给你的“线阵列”。然后用逗号分隔每一行(假设您没有可能包含逗号的字段值?)以获取每行中的单个值。 –
你确定你想要一个动态数组吗?换句话说,你是否想要两个以上的“列”数据?这对于CSV工作来说似乎很不寻常,除非您只是构建标题行和列。也许你想要一个具有两列数据的二维数组,但是是一个动态行?如果你发布了你拥有的字符串以及你希望数组包含的内容(例如strdata(0,0)= xx strdata(0,1)= xxxxx – PGCodeRider
),那么在这里检查一个关于导入文本(csv)文件.... https://*.com/questions/10434335/text-file-in-vba-open-find-replace-saveas-close-file#10434907 – jsotola