Gav*_*vin 2 csv excel vba split
我有通过http下载获得的csv字符串(utf-8).
根据情况,字符串中的数据可能包含不同数量的列,但每个单独的时间处理一个字符串,它将包含相同数量的列并且是连续的.(数据将是均匀的).
该字符串可以包含任意数量的行.
第一行将始终是标题.
字符串字段将用双引号括起来,可以包含逗号,引号和换行符.
字符串中的引号和双引号通过加倍来转义,因此""和"
换句话说,这是一个格式良好的csv格式.Excel通过它的标准文件打开机制格式化这些数据没有问题.
但是我想避免保存到文件然后打开csv,因为在某些情况下我需要处理输出,甚至与工作表上的现有数据合并.
(通过编辑添加了以下信息) Excel应用程序将分发到各个目的地,我想避免可能的潜在权限问题,似乎没有写入磁盘是一个很好的方法来做到这一点
我在想类似下面的伪:
rows = split(csvString, vbCrLf) 'wont work due to newlines inside string fields?
FOREACH rows as row
fields = split(row, ',') 'wont work due to commas in string fields?
ENDFOR
Run Code Online (Sandbox Code Playgroud)
显然,无法处理包含特殊标记的字段.
什么是解析这些数据的可靠方法?
谢谢
CSV因为它会出现在记事本(注意不是所有的换行符将\ r \n一些可能是\ N)
LanguageID,AssetID,String,TypeID,Gender
3,50820,"A string of natural language",3,0
3,50819,"Complex text, with comma, "", '' and new line
all being valid",3,0
3,50818,"Some more language",3,0
Run Code Online (Sandbox Code Playgroud)
Excel 2010中的相同csv - 从shell打开(双击 - 没有额外选项)
如果您不介意将数据放在工作簿中:您可以使用空白工作表,将数据添加到1列,然后调用TextToColumns.然后,如果要将数据作为数组返回,只需从工作表的UsedRange加载它即可.
'Dim myArray 'Uncomment line if storing data to array.
'Assumes cvsString is already defined
'Used Temp as sheet for processing
With Sheets("Temp")
.Cells.Delete
.Cells(1, 1) = cvsString
.Cells(1, 1).TextToColumns Destination:=Cells(1, 1), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=True, Space:=False, Other:=False
'myArray = .UsedRange 'Uncomment line if storing data to array
End With
Run Code Online (Sandbox Code Playgroud)