Как создать 3 ексель-файла одновременно
Модераторы: m0p3e, edward_K, Модераторы
Как создать 3 ексель-файла одновременно
Всем добрый день!
Мне нужно из таблицы выгрузить данные в 3 разных ексель-файла.
Создавать файлы по очереди не хочется, т.к. придется 3 раза проходить одну и ту же таблицу, это лишнее время.
Вроде нашла команду xlSetActiveWorkBookByName, но не получается раскидать информацию по файлам, все пишется в один, получается каша.
Можно такое сделать?
Мне нужно из таблицы выгрузить данные в 3 разных ексель-файла.
Создавать файлы по очереди не хочется, т.к. придется 3 раза проходить одну и ту же таблицу, это лишнее время.
Вроде нашла команду xlSetActiveWorkBookByName, но не получается раскидать информацию по файлам, все пишется в один, получается каша.
Можно такое сделать?
Кто сказал, что бесполезно биться головой об стену?!
Re: Как создать 3 ексель-файла одновременно
Вырезка из моего кода:
Код: Выделить всё
...
.{while i<n
.begin
xlCreateNewExcelWithTemplate(shabl,true);
xlSetActiveWorkBook(i);
end.
...
.begin
i:=i+1;
xlKillExcel;
end.
.}
.endform
Re: Как создать 3 ексель-файла одновременно
Не получается, 3 "шапки" собирает в одну
Код: Выделить всё
nf_xlsPers:=str_path+'persons_'+datetostr(cur_date(),'DD-MM-YYYY')+'.xlsx';
nf_xlsTypesVS:=str_path+'TypesVS_'+datetostr(cur_date(),'DD-MM-YYYY')+'.xlsx';
nf_xlsDocs:=str_path+'Docs_'+datetostr(cur_date(),'DD-MM-YYYY')+'.xlsx';
xlCreateExcelWithTemplate(nf_xlsPers,true);
xlSetActiveWorkBook(1);
xlSetCellStringValue('Таб.№',1,1,1,1);
xlSetCellStringValue('ФИО',1,2,1,2);
xlSetCellStringValue('Дата рожд.',1,3,1,3);
xlSetCellStringValue('Дата приказа о приеме на работу',1,4,1,4);
xlSetCellStringValue('№ приказа о приеме на работу',1,5,1,5);
xlSetCellStringValue('Должность по ШР',1,6,1,6);
xlSetCellStringValue('№ приказа о назначении на должность',1,7,1,7);
xlSetCellStringValue('Дата приказа о назначении на должность',1,8,1,8);
xlSetCellStringValue('Подразделение по ШР',1,9,1,9);
xlSetCellStringValue('№ диплома о высшем образовании',1,10,1,10);
xlSetCellStringValue('Дата выдачи диплома',1,11,1,11);
xlSetCellStringValue('Наименование ВУЗа',1,12,1,12);
xlCreateExcelWithTemplate(nf_xlsTypesVS,true);
xlSetActiveWorkBook(2);
xlSetCellStringValue('Таб.№',1,1,1,1);
xlSetCellStringValue('Тип ВС',1,2,1,2);
xlSetCellStringValue('№ свидетельства',1,3,1,3);
xlSetCellStringValue('Дата выдачи',1,4,1,4);
xlSetCellStringValue('Учебное заведение',1,5,1,5);
xlCreateExcelWithTemplate(nf_xlsDocs,true);
xlSetActiveWorkBook(3);
xlSetCellStringValue('Таб.№',1,1,1,1);
xlSetCellStringValue('Тип документа',1,2,1,2);
xlSetCellStringValue('№ документа',1,3,1,3);
xlSetCellStringValue('Дата выдачи',1,4,1,4);
xlSetCellStringValue('Учебное заведение',1,5,1,5);
xlSetCellStringValue('Уровень ICAO',1,6,1,6);
_row1:=2; _row2:=2; _row3:=2;
_loop persons
{
......
! выводим информацию в 1-й файл
xlSetActiveWorkBook(1);
xlSetCellStringValue(string(tabnom+10000000),_row1,1,_row1,1);
xlSetCellStringValue(persons.fio,_row1,2,_row1,2);
xlSetCellDateValue(persons.borndate,_row1,3,_row1,3);
xlSetCellDateValue(dPrFirstApp,_row1,4,_row1,4);
xlSetCellStringValue(NPrFirstApp,_row1,5,_row1,5);
xlSetCellStringValue(dolgn,_row1,6,_row1,6);
xlSetCellStringValue(NPrCurApp,_row1,7,_row1,7);
xlSetCellDateValue(dPrFirstApp,_row1,8,_row1,8);
xlSetCellStringValue(podr,1,9,1,9);
...........
_row1:=_row1+1;
}
xlKillExcel();
Кто сказал, что бесполезно биться головой об стену?!
Re: Как создать 3 ексель-файла одновременно
"Убейте" ранее открытый Excel перед вызовом нового. Получается, всё равно по очереди формируются отчёты...
Re: Как создать 3 ексель-файла одновременно
если я его убью, то как я потом писать в него буду?
мне же в цикле по таблице persons нужно писать во все 3 файла одновременно (разную информацию).
мне же в цикле по таблице persons нужно писать во все 3 файла одновременно (разную информацию).
Кто сказал, что бесполезно биться головой об стену?!
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Как создать 3 ексель-файла одновременно
А кто вам сказал что книги имеют индификатор 1,2,3? Попробуйте их по имени переключать. Не лишне сделать проверку на ошибки - что возвращают xl функции? Вообще удобней писать в разные листы, а не книги.
Re: Как создать 3 ексель-файла одновременно
Тут xlOpenWorkBook нужно использовать, но муторно.
IMHO намного проще заполнить три матрицы и поочередно открывая файлы их сливать.
IMHO намного проще заполнить три матрицы и поочередно открывая файлы их сливать.
Код: Выделить всё
var m1,m2,m3 : LongInt;
m1 := xlCreateMatrixEx (,);
.............
xlStWritetoMatrixEx(m1,iRow,iCol,'')
.............
Re: Как создать 3 ексель-файла одновременно
По имени переключать пробовала, но было то же самое.
Суть задачи такова, что это должна быть ночная выгрузка с данными, запускаемая в авто-режиме.
Файлы создаются в определенном месте каждую ночь.
Эти данные будут перегружаться в другую задачу, и та задача ставит требование, что это должны быть 3 отдельных файла.
Суть задачи такова, что это должна быть ночная выгрузка с данными, запускаемая в авто-режиме.
Файлы создаются в определенном месте каждую ночь.
Эти данные будут перегружаться в другую задачу, и та задача ставит требование, что это должны быть 3 отдельных файла.
Кто сказал, что бесполезно биться головой об стену?!
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Как создать 3 ексель-файла одновременно
+1 m0p3e
Вы бы лучше бы избавились от xlSetCellStringValue...тогда бы и выгружалось побыстрее на порядок
Вы бы лучше бы избавились от xlSetCellStringValue...тогда бы и выгружалось побыстрее на порядок
Re: Как создать 3 ексель-файла одновременно
Спасибо, попробую с матрицами, только где можно почитать про эти функции?
В excel.doc я не нашла таких....
Как записать в матрицу переменную типа дата? Только в строку преобразовывать?
И еще, как переписать данные из матрицы в эксель-файл со строго определенным именем в определенную папку так, чтобы файл при этом еще и НЕ остался открытым?
В excel.doc я не нашла таких....
Как записать в матрицу переменную типа дата? Только в строку преобразовывать?
И еще, как переписать данные из матрицы в эксель-файл со строго определенным именем в определенную папку так, чтобы файл при этом еще и НЕ остался открытым?
Кто сказал, что бесполезно биться головой об стену?!
Re: Как создать 3 ексель-файла одновременно
Закрыть его после записи!s2176 писал(а):как переписать данные из матрицы в эксель-файл со строго определенным именем в определенную папку так, чтобы файл при этом еще и НЕ остался открытым?
Код: Выделить всё
...
bul:=xlOpenExcel(false);
xlDisplayAlerts(false);
...
bul:=xlSaveAsWorkBook(1, papka+sklkod+'.xls');
...
xlKillExcel;
ExecProgram('taskkill', '/im excel.exe /f', 4096, 0);
...
Re: Как создать 3 ексель-файла одновременно
Получилось, спасибо, RAJAH!
И все-таки где можно найти описание этих функций?
И все-таки где можно найти описание этих функций?
Кто сказал, что бесполезно биться головой об стену?!
Re: Как создать 3 ексель-файла одновременно
Excel_Lib.pdf на ftp.s2176 писал(а):где можно найти описание этих функций?
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Как создать 3 ексель-файла одновременно
Для закрытия нужной книги есть еще xlCloseWorkBookByName. Зачем же все процессы прибивать? Хотя для автомата эт наверное надежней.
Re: Как создать 3 ексель-файла одновременно
Спасибо всем за помощь!
Есть еще один некритичный вопрос.
Я заранее не знаю, сколько будет строк в матрице, поэтому описываю с запасом, например:
xlCreateMatrixEx(50000,6)
А можно как-то изменить количество, после прохода по таблице, когда уже точно известно количество строк?
Есть еще один некритичный вопрос.
Я заранее не знаю, сколько будет строк в матрице, поэтому описываю с запасом, например:
xlCreateMatrixEx(50000,6)
А можно как-то изменить количество, после прохода по таблице, когда уже точно известно количество строк?
Кто сказал, что бесполезно биться головой об стену?!