Программирование на Атлантисе (VIP, FCOM, ARD), FastReport
Модераторы: m0p3e , edward_K , Модераторы
Masygreen
Местный житель
Сообщения: 1089 Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:
Сообщение
Masygreen » 27 июн 2011, 19:23
все время мучаюсь с определением количества строк для excel, чаще всего когда есть более менее удобные алгоритмы посчитать сколько будет строк
вопрос : можно ли переопределить количество строк после окончания вывода содержательной части ...
т.е. написать
а потом перед как нибудь определить что матрица размером 100х18?
ну или какой нибудь динамический расширитель массива типа alloc
Время ведет!
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188 Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb
Сообщение
edward_K » 28 июн 2011, 00:12
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.
Выводить заведомо большую матрицу медленно
Masygreen
Местный житель
Сообщения: 1089 Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:
Сообщение
Masygreen » 28 июн 2011, 11:46
1)тут вся фишка как раз в том что 1000 это тоже много ... (хотя ни кто не мешает и по 30 выводить..) дело не в скорости, а в том чтоб бегунком в Excel если опустится вниз, то мы бы оказались не на херзнает какой строчке, а на конце таблицы..
2)насколько я понял из примера это при каждом инкременте счетчика строк - надо проверку делать, дополнительно запоминать смещение от предыдущего вывода ..
если другого варианта нет и ни каким анализом просчитать примерное количество строк не удается, буду вашим методом пользоваться.Спасибо
Время ведет!
Den
Местный житель
Сообщения: 1846 Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:
Сообщение
Den » 28 июн 2011, 15:16
Может тупо CTRL+END или так не нравится ? )
Vik
Местный житель
Сообщения: 370 Зарегистрирован: 28 сен 2006, 15:43
Откуда: Санкт-Петербург
Контактная информация:
Сообщение
Vik » 28 июн 2011, 17:37
Очень специфично описана проблема, поэтому может не правильно понял. Но, если после вывода в Excel нужно определить используемый диапазон, есть функция xlGetUsedRange
Masygreen
Местный житель
Сообщения: 1089 Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:
Сообщение
Masygreen » 28 июн 2011, 18:34
наверно это будет самое то..
спасибо всем за участие
Время ведет!
m0p3e
Местный житель
Сообщения: 1386 Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Сообщение
m0p3e » 02 июл 2011, 14:34
Кроме того практически все функции при некорректно заданном диапазоне (например 0,0,0,0) используют реально заполненный диапазон.
А насчет динамического увеличения количества строк в матрице надо писать в ТП. Делается за 2 секунды. Почему было удалено - большой вопрос...
Masygreen
Местный житель
Сообщения: 1089 Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:
Сообщение
Masygreen » 04 июл 2011, 12:34
m0p3e писал(а): Кроме того практически все функции при некорректно заданном диапазоне (например 0,0,0,0) используют реально заполненный диапазон.
А насчет динамического увеличения количества строк в матрице надо писать в ТП. Делается за 2 секунды. Почему было удалено - большой вопрос...
попробую с нулями ! интересная идея
насчет простого я бы так не сказал, но реально это не сложно .... видимо осбо не надо да и мы молчим
Время ведет!
m0p3e
Местный житель
Сообщения: 1386 Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Сообщение
m0p3e » 04 июл 2011, 13:29
Masygreen писал(а): насчет простого я бы так не сказал, но реально это не сложно .... видимо осбо не надо да и мы молчим
В доработанных исходниках ExcelLib под OO это было сделано. Но из рабочей сборки вырезали.
Добавлялась одна строчка.
Код: Выделить всё
If Row > VarArrayHighBound ( CurMatrix, 2 ) then VarArrayRedim ( CurMatrix, Row );
Куда уж проще?