Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2012, 10:27   #1
manula
Форумчанин
 
Регистрация: 17.04.2011
Сообщений: 168
По умолчанию Чтение данных с текстового файла(VBA)

Здравствуйте уважаемые формумчане, у меня такая проблема:
есть текстовый файл и мне надо прочитать его и разбить на фрагмента и данные фрагменты поместить в столбцы листа книги, но считать данные нужно не с начала файла а с 9 строки,и каждая новая запись начинается с 9 строки,как мне это осуществить, я пробовал с помощью инструкции Open и т.д. но запнулся именно в этом моменте чтения.
Разбиение нужно начинать со строки:

010010650111Ж19550622..... информация о 1 человеке
........
010011253111М19520228..... информация о 2 человеке

разбить и добавить данные в ячейки книги таким образом:

Num1 | Num2 | Num3 | Num4 | Num5
01 | 00106 | 501 | 19550622 | Ф.И.О.
01 | 00112 | 531 | 19520228 | Ф.И.О.2


Помогите пожалуйста решить данную проблему.Всем откликнувшимся,огромное спасибо!)Ниже прикреплен текстовый файл с информацией.
Вложения
Тип файла: txt info.txt (4.0 Кб, 163 просмотров)

Последний раз редактировалось manula; 04.04.2012 в 10:31.
manula вне форума Ответить с цитированием
Старый 04.04.2012, 10:43   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

см.вложение.
давайте только без фанатизма с "огромным спасибо" - пришлите просто денег...
Вложения
Тип файла: rar info.rar (7.0 Кб, 77 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 04.04.2012, 10:57   #3
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Не понял про 9 строк - в файле их ведь всего 5?
И вообще всё прекрасно разбивается при стандартном импорте текста - только потом лишнюю первую строку удалить...

P.S. Нашёл девятую строку - это если включить wordwrap, и ещё поиграть шириной окна блокнота - тогда можно добиться такого эффекта
Но это не имеет ничего общего с количеством строк. Так, фикция....
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 04.04.2012 в 11:02.
Hugo121 вне форума Ответить с цитированием
Старый 04.04.2012, 12:03   #4
manula
Форумчанин
 
Регистрация: 17.04.2011
Сообщений: 168
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Не понял про 9 строк - в файле их ведь всего 5?
И вообще всё прекрасно разбивается при стандартном импорте текста - только потом лишнюю первую строку удалить...

P.S. Нашёл девятую строку - это если включить wordwrap, и ещё поиграть шириной окна блокнота - тогда можно добиться такого эффекта
Но это не имеет ничего общего с количеством строк. Так, фикция....
Имеется в виду каждая новая запись начинается после 9 строк,а этот текстовый файл может содержать более 1000 записей
Это все хорошо но мне нужно именно программно реализовать при нажатии на кнопку,а экспорт я делал таким образом,вопрос стоит о реализации алгоритма за счет использования инструкций для работы с текстовыми файлами
manula вне форума Ответить с цитированием
Старый 04.04.2012, 12:06   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
всё прекрасно разбивается при стандартном импорте текста - только потом лишнюю первую строку удалить
Игорь, чтобы первую не удалять, достаточно в стандартном импорте указать "Начать импорт со строки:" ...
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 04.04.2012, 12:13   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

manula,
втянуть файл на лист 1 - это нажать несколько раз кнопку на мыше
разможить формулы на листе 2 на 1000 строк - еще несколько раз.
итого 10-15 сек. - все готово.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 04.04.2012, 12:27   #7
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Слушай, а я про первую строку и не знал!
Редко пользуюсь таким импортом, всё больше кодом, ибо часто нужно сразу фильтровать...
Ну а тут файл толково сделан - уже и разделители есть.
Вот, записал рекордером (2003 Эксель), путь поменяйте на свой или добавьте диалог пользователя по выбору файла:

Код:
Option Explicit

Sub Macro1()
'
' Macro1 Macro
' Macro recorded 04.04.2012 by Hugo
'

'
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;D:\TMP\info.txt", _
        Destination:=Range("A1"))
        .Name = "info"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 1251
        .TextFileStartRow = 2
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub
Если повыкидывать лишнее, то можно ограничиться этим (возможно AdjustColumnWidth = True тоже лишнее):
Код:
Sub ImportData()
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;D:\TMP\info.txt", _
        Destination:=Range("A1"))
        .AdjustColumnWidth = True
        .TextFileStartRow = 2
        .TextFileParseType = xlDelimited
        .TextFileTabDelimiter = True
        .TextFileColumnDataTypes = Array(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2)
        .Refresh BackgroundQuery:=False
    End With
End Sub
Кстати, если есть лишние/ненужные колонки, то их можно при импорте исключить - в мастере всё легко и понятно делается.
Или просто в этом коде замените соответствующую 2 (текстовый формат) на 9 (пропустить столбец).

P.S. Если бы не пара/тройка полей, то есть путь проще - меняете/дописываете расширение xls и открываете файл
Но столбец перед фамилиями (и один дальше) Эксель преобразует в 8.3E+38, что всё портит (правда ещё и в первом и втором нули крадёт, ну и дальше тоже может, если попадутся в начале). Если эти столбцы не нужны - просто потом удалите первую строку и лишние столбцы.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 04.04.2012 в 14:37. Причина: описки-опечатки...
Hugo121 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение из текстового файла soirkar Visual C++ 6 22.06.2011 16:58
чтение с текстового файла salwator Паскаль, Turbo Pascal, PascalABC.NET 0 11.06.2011 15:49
Чтение из текстового файла MooNChilDUA Общие вопросы C/C++ 2 13.01.2011 19:25
Чтение текстового файла Kasper1 Общие вопросы по Java, Java SE, Kotlin 5 17.12.2010 15:57
Чтение данных из текстового файла flame33 Общие вопросы .NET 2 19.07.2010 11:43