使用ws.QueryTables.Add导入CSV时出现问题

时间:2016-01-02 19:40:14

标签: excel vba csv import

我无法导入csv文件。第一行工作正常,但其余的都很不稳定。以下是来自csv的第一行和第二行的示例:

"Order # ","Purchased From (Store)","Purchased On","Bill to Name","Ship to Name","G.T. (Base)","G.T. (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默认视图拆分到不同单元格中的不同行。日期也被切成两个单元格[,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单元格不需要完美格式化,只需要在一个单元格中。我无法改变文本文件的格式,因为它们有数千个。

1 个答案:

答案 0 :(得分:1)

我测试了你的csv文件,一切都是正确的。只有字段"Purchased From (Store)"是多行的(如果正确引用则允许,这是这种情况)。

所以你需要一个像.TextFile多行或类似的参数。我会看看能不能找到一个。

日期不应该被削减,因为它也被正确引用:

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

...

查找QueryTable的参数,找不到多行的..奇怪。

但您可能需要将QueryType 设置为xlTextImport。否则,您将不得不使用其他方法。但多行csv肯定是有效的,任何体面的csv解析器都不应该有问题。

  

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

是的,如果引用得当:

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

如果确实需要使用QueryTable,可能会尝试使用ODBC连接字符串而不是Connection:="TEXT;"。请参阅here