Лидирующие нули исключены из конверсии Excel - PullRequest
1 голос
/ 18 июня 2011

У меня есть VB Script, который преобразует файл с разделителями тильды в Excel версии 2003. Все выглядит хорошо, но обнаружил, что начальные нули выпадают из определенных полей. Есть ли способ включить компонент в сценарий, чтобы не отбрасывать начальные нули? Ниже приведен скрипт, используемый для преобразования файла с разделителями тильды. Заранее спасибо.

    Const xlDelimited  = 1
    Const xlWorkbookNormal = -4143

    Set objExcel = CreateObject("Excel.Application")
    objExcel.Visible = True

    objExcel.Workbooks.OpenText "C:\Scripts\Test.txt", _
    , , xlDelimited, , , , , , , True, "~"

    objExcel.Workbooks("Test.txt").SaveAs _
   "C:\Scripts\Test.xls", xlWorkbookNormal

    objExcel.Workbooks("Test.xls").Close

    objExcel.Quit

Ответы [ 2 ]

3 голосов
/ 18 июня 2011

Вы можете использовать параметр 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 обычно).

1 голос
/ 18 июня 2011

Ведущие нули отбрасываются в Excel, потому что он хранит все, что выглядит как число, как число. Если вам действительно нужно отобразить начальные 0, вам нужно обмануть Excel, чтобы сохранить число в виде строки символов. В зависимости от версии Excel, которую вы используете (и, как мне кажется, выравнивания планет), вы обычно можете сделать это, заключив свои поля в кавычки или добавив перед ними одинарную кавычку. Это должно обмануть Excel в сохранении числа в виде текста. Пример:

"001234"~"005678"

или

'001234~'005678

Но по моему опыту это редко необходимо. Если вы выполняете вычисления для значений, вам не нужны первые 0. Если вы храните и / или транспортируете данные, Excel в любом случае не подходит - используйте CSV-файл или другой плоский файл. Единственная веская причина, которую я могу придумать для этого, заключается в том, что вы используете Excel для отображения или печати данных для конечного пользователя, и ваш набор данных содержит некие числовые строки, такие как номера SSN или номера SKU. Если это так, то вышеописанный обходной путь - единственный способ сделать это.

РЕДАКТИРОВАТЬ: Надо было сказать наверху: я не думаю, что есть способ сделать это в сценарии, который вы используете. Обходной путь включает изменение способа создания вашего файла данных, т.е. добавление символов в поля. Кроме того, вы можете написать сценарий, который будет читать в вашем файле данных построчно и по полям и записывать поля в ваш файл Excel, включая заключающие в кавычки / ведущие одинарные кавычки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...