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

标签 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 默认 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 文件,一切都正确。只有字段“购买自(商店)” 是多行的(如果正确引用则允许,此处就是这种情况)。

所以你需要一个像 .TextFilemultiline 之类的参数。我看看能不能找到。

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

"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/

相关文章:

excel - 如何在 Excel 中计算每个类别的唯一值

excel - 创建 VBA 宏以计算具有多个条件的唯一值计数

python - 如何使用csv库中Python的DictReader类?

c++ - 有没有办法从 Excel 的公式栏中获取文本和光标位置?

用于替换格式但保留单元格值 : partially solved 的 VBA

regex - 如何匹配转义组符号 {&date :dd.\{mm\}.yyyy} 而不是 {&date :dd. {mm}.yyyy} 与 vba 和正则表达式

csv - ArangoDB 将 csv 导入边缘(图表)

xml - 创建 bash 脚本以将 xml 文件解析为 csv

c# - Interop Excel 未关闭进程

excel - 将 Excel f9/shift f9/ctrl f9 键重新绑定(bind)到原始功能