Excel VBA将csvstring处理成数组

我有通过http下载获得的csvstring(utf-8)。

根据情况,string中的数据可能包含不同数量的列,但每个单独的时间string将被处理,它将包含相同数量的列并且是连续的。 (数据将是均匀的)。

该string可以包含任意数量的行。

第一行将永远是标题。

string字段将被封装在双引号中,并可能包含逗号,引号和换行符

引号和双引号内的string是通过加倍逃脱所以“”和“

换句话说,这是一个格式良好的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 

显然,不能处理包含特殊令牌的字段。

什么是parsing这些数据的可靠方法?

谢谢

编辑13/10/2012数据样本

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 

在Excel 2010中相同的csv – 从shell打开(双击 – 没有额外的选项) 在这里输入图像说明

我可以想到三种可能性:

  1. 使用正则expression式来处理文本。 在SO和谷歌上有很多可用的例子来分隔string。
  2. 使用Excel的强大function:将文本保存到临时文件,打开临时表并从表格中读取数据。 完成后删除文件和工作表。
  3. 使用ADO查询数据。 将该string保存到一个临时文件并对其运行查询以返回所需的字段。

为了提供更具体的build议,我需要input数据和预期输出的样本

如果您不介意将数据放在工作簿中:可以使用空白工作表,将数据添加到1列中,然后调用TextToColumns 。 然后,如果您想以数组forms返回数据,只需从工作表的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