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

Поменять кол-во строк xlCreateMatrix(500000,18)

Добавлено: 27 июн 2011, 19:23
Masygreen
все время мучаюсь с определением количества строк для excel, чаще всего когда есть более менее удобные алгоритмы посчитать сколько будет строк

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

 xlCreateMatrix(_RowCount,18);
вопрос : можно ли переопределить количество строк после окончания вывода содержательной части ...
т.е. написать

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

xlCreateMatrix(5000000,18);
а потом перед как нибудь определить что матрица размером 100х18?

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

 xlWriteMatrixToExcel(1,1);
ну или какой нибудь динамический расширитель массива типа alloc

Re: Поменять кол-во строк xlCreateMatrix(500000,18)

Добавлено: 28 июн 2011, 00:12
edward_K
1. кто вам мешает заранее определить кол-во строк а потом создать матрицу, а сразу после вывода ее сбросить?
2. Обычно матрицу задают на небольшое кол-во строк - скажем на 1000, после того как счетчик строк превышает, выводят и чистят.
Я делаю так

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

if wrow-matrixsdvig>matrixlen
    { MyxlWriteMatrix(wrow) ;  
       
    }
.Function MyxlWriteMatrix(wrow:longint) :boolean ;
begin
  MyxlWriteMatrix:=xlWriteMatrixToExcel(matrixsdvig+1,0) ;
  xlClearMatrix ;
  matrixsdvig:=wrow-1 ;
 end.
Выводить заведомо большую матрицу медленно

Re: Поменять кол-во строк xlCreateMatrix(500000,18)

Добавлено: 28 июн 2011, 11:46
Masygreen
1)тут вся фишка как раз в том что 1000 это тоже много ... (хотя ни кто не мешает и по 30 выводить..) дело не в скорости, а в том чтоб бегунком в Excel если опустится вниз, то мы бы оказались не на херзнает какой строчке, а на конце таблицы..
2)насколько я понял из примера это при каждом инкременте счетчика строк - надо проверку делать, дополнительно запоминать смещение от предыдущего вывода ..
если другого варианта нет и ни каким анализом просчитать примерное количество строк не удается, буду вашим методом пользоваться.Спасибо

Re: Поменять кол-во строк xlCreateMatrix(500000,18)

Добавлено: 28 июн 2011, 15:16
Den
Может тупо CTRL+END или так не нравится ? )

Re: Поменять кол-во строк xlCreateMatrix(500000,18)

Добавлено: 28 июн 2011, 17:37
Vik
Очень специфично описана проблема, поэтому может не правильно понял. Но, если после вывода в Excel нужно определить используемый диапазон, есть функция xlGetUsedRange

Re: Поменять кол-во строк xlCreateMatrix(500000,18)

Добавлено: 28 июн 2011, 18:34
Masygreen

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

xlGetUsedRange
наверно это будет самое то..
спасибо всем за участие

Re: Поменять кол-во строк xlCreateMatrix(500000,18)

Добавлено: 02 июл 2011, 14:34
m0p3e
Кроме того практически все функции при некорректно заданном диапазоне (например 0,0,0,0) используют реально заполненный диапазон.

А насчет динамического увеличения количества строк в матрице надо писать в ТП. Делается за 2 секунды. Почему было удалено - большой вопрос...

Re: Поменять кол-во строк xlCreateMatrix(500000,18)

Добавлено: 04 июл 2011, 12:34
Masygreen
m0p3e писал(а):Кроме того практически все функции при некорректно заданном диапазоне (например 0,0,0,0) используют реально заполненный диапазон.

А насчет динамического увеличения количества строк в матрице надо писать в ТП. Делается за 2 секунды. Почему было удалено - большой вопрос...
попробую с нулями ! интересная идея :) насчет простого я бы так не сказал, но реально это не сложно .... видимо осбо не надо да и мы молчим :)

Re: Поменять кол-во строк xlCreateMatrix(500000,18)

Добавлено: 04 июл 2011, 13:29
m0p3e
Masygreen писал(а):насчет простого я бы так не сказал, но реально это не сложно .... видимо осбо не надо да и мы молчим :)
В доработанных исходниках ExcelLib под OO это было сделано. Но из рабочей сборки вырезали. :(
Добавлялась одна строчка.

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

  If Row > VarArrayHighBound ( CurMatrix, 2 ) then VarArrayRedim ( CurMatrix, Row );
Куда уж проще?