【发布时间】:2016-04-06 19:31:47
【问题描述】:
我无法导入 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 单元格,只需将所有内容都放在一个单元格中即可。我无法更改文本文件的格式,因为它们有数千个。
【问题讨论】:
-
IIRC,CSV 格式不允许在单元格值中换行,即使引用。换行符作为行终止符始终覆盖列终止符和引号。
-
很奇怪,它肯定有一些格式。当我在 excel 中手动打开文档时,它可以正常工作,但是当我使用这种方法导入它时,它不会。刚刚检查了文件类型并确认它是一个 csv。
-
等等,你为什么把它作为一个查询表打开?将其作为工作簿打开,然后将工作表复制到当前工作簿中,然后在其上定义一个 QueryTable。
-
queryTable 是我唯一能想到的。我该怎么做?我真的只需要将数据复制到当前工作簿中
-
然后将其作为工作簿打开。我认为它的 Application.Workbooks.Open.