Как импортировать .CSV с сохранением ведущих нулей в Excel с помощью VBA

У меня есть база данных, которая делает извлечение в формате .CSV, и с помощью VBA я импортирую данные в Excel, но при импорте в идентификаторах отсутствуют начальные нули.

Даже когда я открываю файл .CSV в Excel, этих нулей там нет. Это текущий код, который я использую:

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

Я попытался заранее изменить формат рабочего листа на ТЕКСТ, но эти нули по-прежнему отсутствуют, хотя эти данные находятся в текстовом формате.

Изменить 1: я открыл .CSV с помощью Блокнота, и там есть эти начальные нули. Но не тогда, когда я открываю его с помощью Excel


person Dark161000    schedule 08.06.2021    source источник
comment
Даже когда я открываю файл .CSV, этих нулей там нет — вы открываете файл в Excel? Вы пробовали (например) Блокнот? Если что-то похоже на число, Excel преобразует его и отбросит все начальные нули. Сколько полей/столбцов в вашем файле?   -  person Tim Williams    schedule 09.06.2021
comment
@TimWilliams да, я открыл этот файл в Блокноте, и там есть нули, но при их импорте с помощью VBA в Excel эти нули отсутствуют. Открытие CSV с помощью Excel также не покажет эти начальные нули.   -  person Dark161000    schedule 09.06.2021
comment
В данных только один столбец?   -  person Tim Williams    schedule 09.06.2021
comment
@TimWilliams Нет, он содержит 39 столбцов.   -  person Dark161000    schedule 09.06.2021
comment
.TextFileColumnDataTypes = Array(xlTextFormat) применит текстовый формат только к первому столбцу. Возвращает или задает упорядоченный массив констант, указывающих типы данных, применяемые к соответствующим столбцам в текстовом файле, который вы импортируете в таблицу запросов. Константа по умолчанию для каждого столбца — xlGeneral. Чтение/запись Вариант. docs.microsoft.com/en-us/office/ vba/апи/   -  person Tim Williams    schedule 09.06.2021
comment
@TimWilliams Итак, мне нужно добавить xlTextFormat для каждого столбца, который мне нужен в текстовом формате, верно? Тогда это было глупо. Помогло, теперь нули стоят. Большое спасибо! :D   -  person Dark161000    schedule 09.06.2021
comment
Приятно слышать, что ты это понял.   -  person Tim Williams    schedule 09.06.2021


Ответы (1)


.TextFileColumnDataTypes = Array(xlTextFormat) 

будет применять текстовый формат только к первому столбцу. Вам нужно добавить значение, соответствующее каждому столбцу, который необходимо импортировать в текстовом формате.

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

Возвращает или задает упорядоченный массив констант, указывающих типы данных, применяемые к соответствующим столбцам в текстовом файле, который вы импортируете в таблицу запроса. Константа по умолчанию для каждого столбца — xlGeneral. Чтение/запись Вариант.

person Tim Williams    schedule 08.06.2021