Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > [Перенесено из VB6/MS Access]загрузить текстовый файл в excel


Автор: cASSAndra 19.9.2008, 14:40
добрый день, у меня такая вот ситуация. есть n-ное количество текстовых файлов, данные в которых разделены символами табуляции и новой строки. мне надо все эти n файлов засунуть в один документ Excel на разные листы. как этот файл засовывать в excel построчно я нашла, но так слишком долго будет. не существует ли какой-то команды типа loadfile, чтобы не по ячейкам все копировать, а сразу весь документ добавлять? как с cтравливанием xml и xslt?

 smile 

Автор: kapbepucm 19.9.2008, 15:53
Workbooks.OpenText?

Автор: cASSAndra 19.9.2008, 17:11
может быть и так. а с его помощью можно выводить несколько файлов на несколько листов в одну и ту же книгу?

Автор: Akina 19.9.2008, 17:42
По одному. Вручную.
Или написАть макросик, который сделает это программно.
Но тебе быстрее вручную.

Автор: cASSAndra 19.9.2008, 19:12
Цитата

По одному. Вручную.
Или написАть макросик, который сделает это программно.
Но тебе быстрее вручную. 


 smile  да конечно, быстрее вручную... да и к макросам это отношения не имеет. это все не из Excel запускается.

ситуация такая. пишу отчеты в крупной банковской системе, которая у нас почти не используется. хитрыми манипуляциями получаю список проводок за день/месяц/квартал в разрезе по всем отделениям банка (неограниченное число). сколько отделений, столько текстовых файлов получается. текстовый формат - дурацкое требование банка. иначе вывела бы все данные в xml файлы, создала xslt шаблон и просто потом стравила бы их, получив документ Excel за 2 секунды.

вся фишка в том, что в системе это пишется в vb скриптах и б'ольшая часть того что можно найти по .NET естественно не катит. 
нашла пример с OpenText http://www.codeguru.com/forum/showthread.php?threadid=398782
помоему таким же макаром можно и через просто Оpen открыть - все нормально выводится. но мне надо несколько документов загнать в одну книгу и на разные листы (для каждого отделения - свой текстовый файл и свой лист в Excel соответственно).  - это чтобы пользователю нагляднее смотреть было, если отчет вручную запустят, а не в процедурах закрытия дня. при запуске в закрытии дня этот Excel никому нафиг не нужен  smile 

может есть что-то типа Excel.Workbooks(1).Worksheets(i).Open(Path(i))?

если построчно писать - отчет систему повесить может часа на 2 думаю - надо же по всем отделениям за квартал проводки выводить - ато и за год, если кому приспичит  smile 

Автор: Akina 19.9.2008, 21:17
Ну собсно делаем макросик... 
Список файлов по шаблону в каталоге получить (думаю, свалить их в один каталог тебе несложно) - дело плёвое. Dir(). А еще лучше - подергать за FSO.Files.
А далее собсно обертываем это дело в цикл.
Получили очередное имя файла. Отрезаем расширение. Создаем НОВЫЙ (!!!) лист с таким именем. Делаем его активным. Делаем на него импорт текстового файла...
Полученный макрос запихиваем в девственно-чистую книгу с одним листиком и стартуем - по окончании его работы книга набита листами с данными.

Автор: cASSAndra 20.9.2008, 14:25
так... из всего вышесказанного, мне надо всего-то сначала активировать нужный лист...

Excel.WorkBook(1).WorkSheet(i).Active
Excel.WorkBook(1).Open(Path(i))

спасибо, попробую. я про активацию не знала, так как вообще с Excel раньше не работала. список файлов получать не надо - он в массиве лежит  smile 
ЗЫ пишется это все не в макросах Excel, а в хитрой системе по имени Temenos T24  smile 

Автор: Akina 20.9.2008, 20:51
Достаточно
Код

Sheets.Add ' Новый лист не только создается, но и становится текущим
ActiveSheet.Name = "123" ' Даем ему какое нравится имя

Автор: cASSAndra 22.9.2008, 09:28
ну вот после этого видимо надо написать

Код

Excel.Workbooks.Open(Path(i))


он создал книгу с кучей страниц с нужными именами, а все файлы открыл в отдельных документах   smile   а Excel.Workbooks(1).Open(Path(i)) не воспринимает

Автор: Akina 22.9.2008, 10:06
Цитата(cASSAndra @  22.9.2008,  10:28 Найти цитируемый пост)
ну вот после этого видимо надо написать

Конечно нет. Open - это открыть в новом документе. Что просишь - то и получаешь. Надо
Код

ActiveSheet.QueryTables.Add(Connection:= Path(i), Destination:=Range("A1"))

Ну в принципе можно натолкать еще груду необходимого кода - специфицирующего, форматирующего и пр.

Автор: cASSAndra 22.9.2008, 11:12
а эту QueryTables объявлять как-то надо? пишет ошибка в скрипте...

может как-то листы копировать можно из одной книги в другую? написала 

Код

Excel.WorkBooks(2).ActiveSheet.Copy(EmptyParam, Excel.WorkBooks(1).WorkSheets(5))


тоже ошибка в скрипте  smile 

Автор: Akina 22.9.2008, 11:42
О мамма миа!!!
Сервис - макрос - начать запись
Данные - импорт внешних данных - импортировать данные
Выполните импорт файла на текущий лист
Сервис - макрос - остановить запись
Сервис - макрос - макросы
Выбрать свежезаписанный макрос
Изменить.

И изучайте...

Автор: cASSAndra 22.9.2008, 13:53
написала я по образцу макроса - ошибок не выводит, но и ничерта ничего не добавляет в документ. тут не полноценный VB, а какойто его обрубок. б'ольшая половина стандартных команд просто игнорируется...

Автор: Akina 22.9.2008, 14:02
Цитата(cASSAndra @  22.9.2008,  14:53 Найти цитируемый пост)
ошибок не выводит, но и ничерта ничего не добавляет в документ.

А ссылку на файл в Path(i) небось относительную даем, а?

Цитата(cASSAndra @  22.9.2008,  14:53 Найти цитируемый пост)
тут не полноценный VB, а какойто его обрубок.

Тут вообще не VB, а VBA. Это другой язык. Хотя синтаксически очень похож.

Автор: cASSAndra 22.9.2008, 14:13
да я и впеременной передать пробовала и так забить...

вот получилось скопировать лист из одной книги в другую таким способом

Код

Excel.Workbooks(fileList(i)).Worksheets(1).Copy Excel.WorkBooks(fileList(i-1)).Worksheets(1)


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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)