Вы можете использовать параметр FieldInfo
, чтобы заставить Excel интерпретировать данные как текст. Согласно документации для OpenText
, FieldInfo
составляет:
Массив, содержащий информацию о разборе
для отдельных столбцов данных.
Интерпретация зависит от стоимости
Тип данных. Когда данные разграничены,
этот аргумент представляет собой массив
двухэлементные массивы, с каждым
двухэлементный массив с указанием
варианты конверсии для конкретного
колонка. Первым элементом является
номер столбца (на основе 1) и
Второй элемент является одним из
Константы XlColumnDataType, указывающие
как анализируется столбец.
...
Если исходные данные имеют фиксированную ширину
столбцы, первый элемент в каждом
двухэлементный массив определяет
положение начального символа в
столбец (как целое число; символ 0
(ноль) - первый символ).
второй элемент в двухэлементном
массив определяет параметр разбора для
столбец как число от 0 до
9, как указано в предыдущей таблице.
Немного изменив ваш пример:
Option Explicit
Const xlDelimited = 1
Const xlWorkbookNormal = -4143
Const xlGeneralFormat = 1
Const xlTextFormat = 2
Dim objExcel
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
objExcel.Workbooks.OpenText "C:\Scripts\Test.txt", _
, , xlDelimited, , , , , , , True, "~", _
Array(Array(1, xlTextFormat), Array(2, xlTextFormat), Array(3, xlGeneralFormat))
objExcel.Workbooks("Test.txt").SaveAs _
"C:\Scripts\Test.xls", xlWorkbookNormal
objExcel.Workbooks("Test.xls").Close
objExcel.Quit
Это Test.txt
Я использовал:
"001234"~"000543"~"000555"
В этом примере первые два столбца интерпретируются как текст (первые нули сохраняются), в то время как третий столбец интерпретируется как число (как в Excel обычно).