Страница 1 из 2

Как создать 3 ексель-файла одновременно

Добавлено: 19 сен 2014, 13:41
s2176
Всем добрый день!

Мне нужно из таблицы выгрузить данные в 3 разных ексель-файла.
Создавать файлы по очереди не хочется, т.к. придется 3 раза проходить одну и ту же таблицу, это лишнее время.
Вроде нашла команду xlSetActiveWorkBookByName, но не получается раскидать информацию по файлам, все пишется в один, получается каша.

Можно такое сделать?

Re: Как создать 3 ексель-файла одновременно

Добавлено: 19 сен 2014, 13:58
RAJAH
Вырезка из моего кода:

Код: Выделить всё

...
.{while i<n
.begin
   xlCreateNewExcelWithTemplate(shabl,true);
   xlSetActiveWorkBook(i);
end.
...
.begin
   i:=i+1;
   xlKillExcel;
end.
.}
.endform

Re: Как создать 3 ексель-файла одновременно

Добавлено: 19 сен 2014, 14:38
s2176
Не получается, 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 ексель-файла одновременно

Добавлено: 19 сен 2014, 14:55
RAJAH
"Убейте" ранее открытый Excel перед вызовом нового. Получается, всё равно по очереди формируются отчёты...

Re: Как создать 3 ексель-файла одновременно

Добавлено: 19 сен 2014, 14:59
s2176
если я его убью, то как я потом писать в него буду?
мне же в цикле по таблице persons нужно писать во все 3 файла одновременно (разную информацию).

Re: Как создать 3 ексель-файла одновременно

Добавлено: 19 сен 2014, 15:23
edward_K
А кто вам сказал что книги имеют индификатор 1,2,3? Попробуйте их по имени переключать. Не лишне сделать проверку на ошибки - что возвращают xl функции? Вообще удобней писать в разные листы, а не книги.

Re: Как создать 3 ексель-файла одновременно

Добавлено: 19 сен 2014, 15:24
m0p3e
Тут xlOpenWorkBook нужно использовать, но муторно.
IMHO намного проще заполнить три матрицы и поочередно открывая файлы их сливать.

Код: Выделить всё

var m1,m2,m3 : LongInt;
m1 := xlCreateMatrixEx (,);
.............
xlStWritetoMatrixEx(m1,iRow,iCol,'')
.............


Re: Как создать 3 ексель-файла одновременно

Добавлено: 19 сен 2014, 15:36
s2176
По имени переключать пробовала, но было то же самое.

Суть задачи такова, что это должна быть ночная выгрузка с данными, запускаемая в авто-режиме.
Файлы создаются в определенном месте каждую ночь.
Эти данные будут перегружаться в другую задачу, и та задача ставит требование, что это должны быть 3 отдельных файла.

Re: Как создать 3 ексель-файла одновременно

Добавлено: 19 сен 2014, 17:16
Den
+1 m0p3e
Вы бы лучше бы избавились от xlSetCellStringValue...тогда бы и выгружалось побыстрее на порядок

Re: Как создать 3 ексель-файла одновременно

Добавлено: 22 сен 2014, 08:07
s2176
Спасибо, попробую с матрицами, только где можно почитать про эти функции?
В excel.doc я не нашла таких....
Как записать в матрицу переменную типа дата? Только в строку преобразовывать?
И еще, как переписать данные из матрицы в эксель-файл со строго определенным именем в определенную папку так, чтобы файл при этом еще и НЕ остался открытым?

Re: Как создать 3 ексель-файла одновременно

Добавлено: 22 сен 2014, 08:59
RAJAH
s2176 писал(а):как переписать данные из матрицы в эксель-файл со строго определенным именем в определенную папку так, чтобы файл при этом еще и НЕ остался открытым?
Закрыть его после записи! :)

Код: Выделить всё

...
    bul:=xlOpenExcel(false);
    xlDisplayAlerts(false);
...
    bul:=xlSaveAsWorkBook(1, papka+sklkod+'.xls');
...
    xlKillExcel;
    ExecProgram('taskkill', '/im excel.exe /f', 4096, 0);
...

Re: Как создать 3 ексель-файла одновременно

Добавлено: 22 сен 2014, 10:04
s2176
Получилось, спасибо, RAJAH!
И все-таки где можно найти описание этих функций?

Re: Как создать 3 ексель-файла одновременно

Добавлено: 22 сен 2014, 10:06
RAJAH
s2176 писал(а):где можно найти описание этих функций?
Excel_Lib.pdf на ftp.

Re: Как создать 3 ексель-файла одновременно

Добавлено: 22 сен 2014, 11:01
edward_K
Для закрытия нужной книги есть еще xlCloseWorkBookByName. Зачем же все процессы прибивать? Хотя для автомата эт наверное надежней.

Re: Как создать 3 ексель-файла одновременно

Добавлено: 23 сен 2014, 07:46
s2176
Спасибо всем за помощь!
Есть еще один некритичный вопрос.
Я заранее не знаю, сколько будет строк в матрице, поэтому описываю с запасом, например:
xlCreateMatrixEx(50000,6)
А можно как-то изменить количество, после прохода по таблице, когда уже точно известно количество строк?