Иногда я получаю файлы в формате фиксированной ширины. Мне нужно импортировать их в Excel, но Excel не совсем подхватывает столбцы. Я могу делать это каждый раз вручную с помощью мастера импорта текста, но мне интересно, есть ли способ создать "шаблон импорта текста" или что-то подобное - поскольку эти файлы всегда имеют одинаковый формат.
3 ответа
Если вы запишите макрос (Инструменты - Макрос - Запись нового макроса) при открытии файла, вы получите параметры, необходимые для использования метода OpenText. Вот пример
Workbooks.OpenText Filename:= _
"C:\Documents and Settings\dick\My Documents\actsynclog.txt", Origin:=437, _
StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(8, _
1), Array(31, 1), Array(41, 1), Array(57, 1), Array(77, 1), Array(80, 1), Array(82, 1), _
Array(84, 1), Array(86, 1)), TrailingMinusNumbers:=True
Аргумент FieldInfo - это тот, который вас волнует. Это массив 2d массивов. Первый элемент - это столбец, а второй - тип данных. В этом примере текстовый файл разбивается на следующие столбцы: 0, 8, 31, 41, 57, 77, 80, 82, 84 и 86.
С этим вы, вы можете написать макрос, чтобы открыть текстовый файл. См. Метод GetOpenFileName объекта Application, чтобы узнать, как выбрать файл для открытия.
В Excel можно сохранить настройки импорта текста (в виде "шаблона") и использовать их позже с любым текстовым файлом. В блоге Excel MVP Ян Карел Питерс описывает это подробно:http://blogs.office.com/2010/06/10/importing-text-files-in-an-excel-sheet/
"Шаблон импорта текста" автоматически создается по завершении работы с мастером импорта текста. Убедитесь, что вы сохранили свою книгу, чтобы сохранить "шаблон".
Чтобы повторно использовать его с другим (или тем же) текстовым файлом:
- Щелкните по любой ячейке на вашем листе, которая содержит (использовалась для хранения) данные предыдущего импорта.
- Excel 2007/2010: нажмите «Данные» -> «Обновить все» -> «Обновить»
- Excel 2003 и старше: нажмите «Данные» -> «Обновить данные»
Если вы используете этот "шаблон" для постоянного импорта файла с одним и тем же именем и местоположением, вы можете настроить "шаблон" так, чтобы Excel не запрашивал имя файла каждый раз, когда вы нажимаете кнопку "Обновить".
Во время импорта текста нажмите «Свойства ...» в диалоговом окне «Импорт данных» и снимите флажок «Запросить имя файла при обновлении» в диалоговом окне «Свойства внешнего диапазона данных». Вы также можете отредактировать это позже в диалоге свойств соединения.
Я бы опубликовал скриншоты, но мне «нужно как минимум 10 репутаций, чтобы размещать изображения».
Если вы хорошо знакомы с программированием на Perl
,
есть модуль Spreadsheet, который поддерживает WriteExcel.
Я использовал это ранее, чтобы сделать обратное тому, что вы хотите - конвертировать файл Excel в формат CSV,
Я использовал ReadExcel
для этого.
Посмотрите на примеры в ссылке WriteExcel
здесь и другие ссылки на XLS-to-CSV по этому вопросу, вы можете найти что-то, что работает для вас между ними.