【问题标题】:Error parsing CSV to XLS with VBA script使用 VBA 脚本将 CSV 解析为 XLS 时出错
【发布时间】:2016-09-28 00:23:38
【问题描述】:

此功能旨在打开 CSV 文件,并将所有数据导入 Excel 工作簿上的特定工作表中。

但我认为在某些情况下我无法使用分隔符解决某种问题。

这是我的功能:

Sub LoopAllExcelFilesInFolder_Invenotry()

  Dim strFilename As String
  Dim wsMstr  As Worksheet:   Set wsMstr = ThisWorkbook.Sheets("ALL_ACTIUS")

  If MsgBox("Erase sheet before start importing?", vbYesNo, "Delete?") _
= vbYes Then wsMstr.UsedRange.Clear

  strFilename = Application.GetOpenFilename _
                (FileFilter:="CSV File (*.csv), *.csv", _
                Title:="Select CSV file: ")

 Worksheets("ALL_MACHINES").Activate
 With ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;" & strFilename, _
    Destination:=Range("A1"))
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .TextFilePromptOnRefresh = False
    .TextFilePlatform = 1252
    .TextFileStartRow = 1
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = True
    .TextFileSemicolonDelimiter = True
    .TextFileCommaDelimiter = False
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
 End With

End Sub

这是源代码(CSV 文件)的一部分,其中包含未按预期“翻译”的行:

在这里您可以看到这一行是如何转换为 Excel 的。 12X5" 字符串不应该在那里。第一列应该只包含 IP 地址。

我很确定这是一个分隔符问题,但我找不到解决方案。

【问题讨论】:

  • 我认为问题与一个:“\n”或“\r”字符有关。有什么办法可以跳过吗?
  • 无法在 Windows 上重现您的问题(尽管我没有在字符串 Server custom ... 中间换行)。当您在文本编辑器中打开文件时,12X5 是否像屏幕截图中显示的那样从新行开始?
  • 是的,完全正确。 12X5 开始换行。
  • 检查数据的来源。为什么它会在字符串中途中断而不是数据行?
  • 这通常发生在文件使用 Unicode 编码而不是 ASCII / UTF-8 / ANSI 保存时,因此您可以尝试在记事本中使用 ANSI 或 UTF-8 编码保存文件

标签: vba excel csv


【解决方案1】:

Workbooks.Open 命令为我解决了这个问题。

Dim wb As Workbook

strFilename = "yourfilename.csv"

Set wb = Workbooks.Open(Filename:=strFilename, local:=True)

【讨论】:

  • 如果您喜欢使用 Workbooks.Open 获得的结果,您只需复制它: wb.Worksheets(1).UsedRange.Copy ThisWorkbook.Worksheets("ALL_MACHINES").Range("A1") : wb.关闭
猜你喜欢
  • 2014-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多