我在导入 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 默认 View 拆分到不同单元格的不同行中。日期也被切成两个单元格,如 [,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 单元格的格式不必完美,只需将所有内容都放在一个单元格中即可。我无法更改文本文件的格式,因为文本文件有数千个。
最佳答案
我测试了您的 csv 文件,一切都正确。只有字段“购买自(商店)”
是多行的(如果正确引用则允许,此处就是这种情况)。
所以你需要一个像 .TextFile
multiline 之类的参数。我看看能不能找到。
日期不应该被删除,因为它也被正确引用:
"Dec 26, 2015 12:07:25 PM"
...
查找了 QueryTable 的参数,找不到多行的参数..奇怪。
但是您可能必须设置 QueryType 到xlTextImport
。否则,您将不得不使用另一种方法。但多行 csv 肯定是有效的,任何像样的 csv 解析器都不应该有问题。
So it can be multline as long as its in a cell?
是的,如果正确引用的话:
field1, "field
2
more data
end field2", rest of fields
如果您确实需要使用 QueryTable 执行此操作,您可以尝试使用 ODBC 连接字符串而不是 Connection:="TEXT;"
。请参阅here .
关于excel - 使用 ws.QueryTables.Add 导入 CSV 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34569941/