使用ws.QueryTables.Add导入CSV时遇到问题

我无法导入一个CSV文件。 第一行工作正常,但其余的都是不吉利的。 以下是csv的第一行和第二行的示例:

"Order # ","Purchased From (Store)","Purchased On","Bill to Name","Ship to Name","GT (Base)","GT (Purchased)",Status 202366,"RaD.com Ra D Ra D Default View ","Dec 26, 2015 12:07:25 PM","John Smith","John Smith",$70.00,$70.00,Pending 

订单号进入正确的单元格,但它将RaD.com Ra D和Ra D Default View拆分到不同单元格中的不同行上。 date也被切成两个单元格,[Dec 19] [2015 12:07:25 PM“]

下面是我正在使用的代码。

 Sub ImportCSV(fname) Set ws = Worksheets.Add(After:=Worksheets(Worksheets.Count)) ws.Name = "temp" & Worksheets.Count + 1 With ws.QueryTables.Add( _ Connection:="TEXT;" & fname, _ Destination:=Range("A1")) .Name = "Temp" & Worksheets.Count + 1 .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .TextFilePromptOnRefresh = False .TextFilePlatform = xlMacintosh .TextFileStartRow = 1 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = False .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = True .TextFileSpaceDelimiter = False .Refresh BackgroundQuery:=False '.UseListObject = False End With End Sub 

RaD.com单元格不一定要格式化,它只需要在一个单元格中。 我不能改变文本文件的格式,因为有成千上万的。

我testing了你的csv文件,并且一切正确。 只有"Purchased From (Store)" ”字段是多行的(如果正确引用,则是允许的)。

所以你需要一个像.TextFile多行等参数。 我会看看我能find一个。

这个date不应该被削减,因为它被正确引用:

 "Dec 26, 2015 12:07:25 PM" 

查询QueryTable的参数,并找不到一个多行..奇怪。

但是您可能必须将QueryType设置为xlTextImport 。 否则,你将不得不使用另一种方法。 但是多行csv肯定是有效的,任何体面的csvparsing器都不应该有这个问题。

所以它可以是多线,只要它在一个单元格?

是的,如果引用正确:

 field1, "field 2 more data end field2", rest of fields 

如果您确实需要使用QueryTable,则可以尝试使用ODBC连接string而不是Connection:="TEXT;" 。 看到这里 。