使用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;"
。 看到这里 。