我无法导入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单元格不需要完美格式化,只需要在一个单元格中。我无法改变文本文件的格式,因为它们有数千个。
答案 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。