【问题标题】:How to import .CSV preserving leading zeros numbers into Excel using VBA如何使用 VBA 将保留前导零数字的 .CSV 导入 Excel
【发布时间】:2021-08-25 21:49:13
【问题描述】:

我有一个数据库,可以在 .CSV 中提取数据并使用 VBA 将数据导入 Excel,但导入时,ID 中缺少一些前导零

即使我在 Excel 中打开 .CSV 文件,这些零也不存在。 这是我正在使用的当前代码:

sub import()
Dim File As String

MsgBox "Please select the Extract File", vbInformation

With Application.FileDialog(msoFileDialogFilePicker)
    .Filters.Clear
    .InitialFileName = "\\route"
    .AllowMultiSelect = False
    .Filters.Add "csv", "*.csv"
    If .Show = -1 Then
        File = .SelectedItems(1)
    Else
        MsgBox "Please, select the file then try again", vbExclamation
        Exit Sub
    End If
End With

With Worksheets("Data Paste").QueryTables.Add(Connection:= _
    "TEXT;" & File _
    , Destination:=Worksheets("Data Paste").Range("$A$1"))
    .Name = "FileName"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .TextFilePromptOnRefresh = False
    .TextFilePlatform = 65001
    .TextFileStartRow = 1
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = False
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = True
    .TextFileSpaceDelimiter = False
    .TextFileTrailingMinusNumbers = True
    .TextFileColumnDataTypes = Array(xlTextFormat)
    .Refresh BackgroundQuery:=False
End With
Exit Sub

我尝试事先将工作表的格式更改为 TEXT,但即使该数据是文本格式,这些零仍然丢失。

编辑 1:我用记事本打开了 .CSV,那些前导零就在那里。但不是当我用 Excel 打开它时

【问题讨论】:

  • “即使我打开 .CSV 文件,这些零也不存在” - 你是在 excel 中打开文件吗?您是否尝试过(例如)记事本?如果某些东西看起来像一个数字,那么 Excel 将对其进行转换并删除任何前导零。您的文件中有多少个字段/列?
  • @TimWilliams 是的,我在记事本中打开了该文件并且零在那里,但是当使用 VBA 将它们导入 Excel 时,这些零丢失了。用 excel 打开 CSV 也不会显示那些前导零。
  • 数据中是否只有一列?
  • @TimWilliams 不,它包含 39 列
  • .TextFileColumnDataTypes = Array(xlTextFormat) 只会将文本格式应用于第一列。 "返回或设置一个 有序的常量数组,指定应用于您正在导入的文本文件中的相应列到查询表中的数据类型。每列的默认常量是 xlGeneral。阅读/写变体。” docs.microsoft.com/en-us/office/vba/api/…

标签: excel vba csv leading-zero


【解决方案1】:
.TextFileColumnDataTypes = Array(xlTextFormat) 

只会将文本格式应用于第一列。您需要为需要以文本格式导入的每一列添加一个值。

https://docs.microsoft.com/en-us/office/vba/api/excel.querytable.textfilecolumndatatypes

返回或设置指定数据的有序常量数组 应用于文本文件中相应列的类型 正在导入到查询表中。每列的默认常量 是 xlGeneral。读/写变体。

【讨论】:

    猜你喜欢
    • 2014-09-01
    • 2014-02-14
    • 2011-10-01
    • 2019-09-01
    • 2019-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    相关资源
    最近更新 更多