Вывод последовательно в разные файлы Excel

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Irina_
Местный житель
Сообщения: 553
Зарегистрирован: 17 июл 2012, 11:56
Откуда: Республика Беларусь, г.Могилев

Вывод последовательно в разные файлы Excel

Сообщение Irina_ »

Здравствуйте.
Пишу на vip. В цикле на каждой итерации: создаю файл Excel, вывожу информацию в него, файл сохраняю и закрываю. Т.е. последовательно формируется несколько файлов (по количеству итераций). Вариант с выводом в один файл на разные листы не устраивает.
На каждой итерации:

Recept:=…;
name_f:=TranslatePath ('%ROOT%\OUT\%USER%\' + Recept + '.xlsx');
xlCreateExcel( name_f, True);
xlDisplayAlerts(False);
xlSetActiveWorkBookByName( name_f );
… // вывод инфо в файл EXCEL
xlSaveWorkBookByName( name_f );
xlCloseWorkBookByName( name_f );
xlDisplayAlerts(True);
xlKillExcel;

Все идет нормально, файлы формируются, но заметила проблему: после каждой итерации идет «моргание» на мониторе. Как-то некомфортно. Можно ли от этого избавиться? Установила, что «моргание» идет после вызова xlKillExcel.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: Вывод последовательно в разные файлы Excel

Сообщение Алексей »

а если попробовать работать с разными книгами и когда закончите уже один раз сделать killExcel ?
Irina_
Местный житель
Сообщения: 553
Зарегистрирован: 17 июл 2012, 11:56
Откуда: Республика Беларусь, г.Могилев

Re: Вывод последовательно в разные файлы Excel

Сообщение Irina_ »

Попробовала поставить xlKillExcel не после каждой итерации, а один раз в конце. В результате при попытке удалить из вновь созданной книги всех листов кроме 1-го стала получать ошибку удаления листа (ранее ошибки не было). При анализе оказалось, что GetSheetCount вместо 3 стала возвращать 18992. Поставила обработку результата работы ряда функций по работе с EXCEL, обнаружила, что xlSetActiveWorkBookByName(name_f) вернула false. И наконец, нужные файлы вообще не сформировались. После долгих мучений вернула xlKillExcel на каждую итерацию.
Может я не указала какую-то еще функцию по работе с EXCEL или воспользовалась не той, что надо? Ранее не сталкивалась с необходимостью вывода инфо последовательно в разные файлы, вывод всегда делала в один.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: Вывод последовательно в разные файлы Excel

Сообщение Алексей »

Если честно, я вывожу в несколько файлов, но их не так много и формируется отчет достаточно долго, так что мерцания если и есть, то почти незаметны.
С книгами экселя не работал, но думаю раз функции есть - они должны работать.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Вывод последовательно в разные файлы Excel

Сообщение edward_K »

Попробуйте юзать xlcreatenewexcel, а еще вопрос почему нею зачете шаблоны? Xlcreatefrom...
Irina_
Местный житель
Сообщения: 553
Зарегистрирован: 17 июл 2012, 11:56
Откуда: Республика Беларусь, г.Могилев

Re: Вывод последовательно в разные файлы Excel

Сообщение Irina_ »

Здравствуйте. Не использую шаблоны в основном т.к. в тех отчетах, что написала, после вывода некоторой табличной инфо нужно делать форматирование определенных строк или столбцов (иногда разных строк по-разному), задавать в ячейках расчетные формулы (по строкам и/или по столбцам), причем изначально не известен диапазон ячеек для формул. Соглашусь, что можно использовать макросы, но с ними не работала. Как-то удобно и наглядно выводить сразу в Excel, делать нужное форматирование, находить и задавать диапазон строк или столбцов для формул. И еще раз соглашусь, что можно увеличить скорость формирования отчета с использованием шаблонов и макросов, но пока у меня не было замечаний по скорости. В любом случае использование шаблонов – дело предпочтений, привычки и опыта написания макросов. Ведь для сложных отчетов просто вывод данных в Excel без использования макросов чаще всего невозможен.
А теперь по существу: xlcreatenewexcel - такой функции нет. Может xlCreateNewExcelWithTemplate? Попробовала изменить работу с файлами: создавала на основе шаблона, который был изначально пустой, меняла функции по работе с файлом по имени на ф-ции по работе с файлом по порядковому номеру открытого файла. Все равно получаю какие-то проблемы: то файлы сохраняются пустыми, хотя и с заданными именами, то ругается на xlSetActiveWorkBook, и др. Попробую еще что-то сделать.
Ответить