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

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

Добавлено: 23 сен 2014, 10:49
edward_K
Поищите на форуме. Обычно матрицу создают на небольшое кол-во строк - типа 100 или 1000(в зависимости от предполагаемого объема) и каждые 100 строк пишут в файл и пересоздают ьатрицу. Другой вариант - сначала посчитать скока надо и создать матрицу под это кол-во строк. Писать за границу созданной матрицы бесполезно.

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

Добавлено: 23 сен 2014, 12:21
m0p3e
Обычно пишу в таблицу в памяти и матрица создается через RecordsInTable().

А ведь в моем варианте ExcelLib было динамическое увеличение матрицы в высоту. Зарезали редиски :(

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

Добавлено: 24 сен 2014, 09:04
s2176
Обычно матрицу создают на небольшое кол-во строк - типа 100 или 1000(в зависимости от предполагаемого объема) и каждые 100 строк пишут в файл и пересоздают матрицу
Матрицу я пересоздам, но получится, что записывать в файл я должна буду каждый раз все в тот же xls-файл, но уже со смещением, т.е., первый экземпляр матрицы с 1-й строки, второй - со 101-й.

А мне это надо делать с тремя разными матрицами.
Не понятно как каждую из них связывать с разными файлами, и записывать данные в разные файлы, да еще и не с первой ячейки, а все ниже и ниже.

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

procedure writeToExcel(_nM: word);
{ var j: word;
  _kolRow:=100;
  if _row[_nM]<_kolRow
    then _row[_nM]:=_row[_nM]+1
    else { j:=_factor[_nM]*_kolRow+1;
	     if not xlWriteMatrixToExcelex(_matrix[_nm],j,1) message('Не могу записать матрицу '+string(_nM));
             if not xlSaveAsWorkBook(_nM,_xlsfileName[_nM]) message('Не могу сохранить');
             xlFreeMatrixex(_matrix[_nm]);
	     _factor[_nM]:=_factor[_nM]+1; _row[_nM]:=1;
	   }
}

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

Добавлено: 24 сен 2014, 11:21
Den
Да выгрузите Вы однажды все из БД во временную таблицу Ваш базовый набор данных.
Потом обходите его столько раз сколько нужно, пересоздавая матрицу и записывая в тот файл который нужно.

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

Добавлено: 24 сен 2014, 12:16
s2176
Нда, придется опять через временные таблицы.
Но, блин, Галактика..... других слов нет.

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

Добавлено: 24 сен 2014, 12:27
Den
У Вас там десятки/сотни тысяч записей выгружаются ? или в чем проблема ?
А так да... XlCreateMatrix ,насколько я понимай ,может быть одна объявлена. Если у Вас будет разный набор данных на вывод - придется три раза матрицу делать.
Хотя может через объекты можно попробовать. Т.е. сделать 3 объекта(для 3 х файлов.). В них методы иннициализации экселя (В каждом объекте свой xlCreateExcelWithTemplate где будите открывать один из 3 шаблонов), методы записи нужной информации и закрытие. ну и в основном модуле ,в цикле по данным сразу пихать инфу в 3 разных места.

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

Добавлено: 24 сен 2014, 12:49
s2176
Проблема в том, что ночная выгрузка будет идти в автоматическом режиме, ежедневно.
На текущий момент записей в каждой таблице будет по несколько тысяч.
База растет, количество выгруженных записей будет также увеличиваться.
Я заранее определяю размер матриц с запасом, но однажды все равно может возникнуть переполнение...

Или уж сразу определить размер на 2 порядка больший :grin: ?

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

Добавлено: 24 сен 2014, 12:58
Den
если это ночью и никто не работает с тему таблицами ,которыми Вы оперируете в своем алгоритме, то можно заранее вычислять сколько будет записей для матрицы :
- в случае mssql или oralce платформы sql select count(*) from ...where....
- в случае битрива смотрите в документации по vip "вложенный запрос" там тоже можно count(*) использовать

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

Добавлено: 24 сен 2014, 13:12
s2176
у нас первасив, заранее посчитать можно только перегрузкой во временные таблицы (простым запросом не обойтись), а хотелось обойтись без двойного прохода.

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

Добавлено: 24 сен 2014, 13:14
Den
"- в случае битрива смотрите в документации по vip "вложенный запрос" там тоже можно count(*) использовать" (с)

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

Добавлено: 27 сен 2014, 18:56
LaaLaa
Den писал(а):"- в случае битрива смотрите в документации по vip "вложенный запрос" там тоже можно count(*) использовать" (с)
В случает первасива это и будет второй проход.

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

Добавлено: 28 сен 2014, 23:01
Den
LaaLaa писал(а):
Den писал(а):"- в случае битрива смотрите в документации по vip "вложенный запрос" там тоже можно count(*) использовать" (с)
В случает первасива это и будет второй проход.
В любом случае будет "второй проход" независимо от платформы -это же запрос к данным. Другое дело на sql-платформах это более эффективно будет