Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.26;
Скачать: CL | DM;

Вниз

Загрузка из Excel`я в StringGrid боольшой таблицы   Найти похожие ветки 

 
Frag   (2003-11-29 14:00) [0]

Доброе время суток!
Господа, не подскажете, как выйти из ситуации.
Делаю так
var
i,j: integer;
Excel:olevariant;
WorkSheet,ArrayData,range: Variant;
Excel := CreateOleObject(xlsAppName);
Excel.Workbooks.open(OpenDialog1.FileName);
WorkSheet := Excel.Workbooks[1].WorkSheets[1];
Excel.EnableEvents := false; //отключаем обработку событий в Excel
Excel.visible:=false;
ArrayData := VarArrayCreate([1,worksheet.UsedRange.Columns.count,1,worksheet.UsedRange.Rows.count], varVariant);
Range := WorkSheet.Range[worksheet.cells[1,1], worksheet.cells[worksheet.UsedRange.rows.count,worksheet.UsedRange.columns.count] ];
ArrayData:=Range.value;

for J := 1 to worksheet.UsedRange.Columns.count do
for i := 1 to worksheet.UsedRange.Rows.count do
StringGrid1.Cells[j,i]:=VarToStr(ArrayData[i,j]);//заполняем таблицу

Excel.Workbooks.Close;
Excel.Quit;
except
end;
Беда в том, что вариантный массив заполняется из Excel`я быстро, а вот таблица немного медленно.


 
Michail Dalakov ©   (2003-11-29 14:26) [1]

Медленно это сколько?
Сколько времени выполняется
for J := 1 to worksheet.UsedRange.Columns.count do
for i := 1 to worksheet.UsedRange.Rows.count do
StringGrid1.Cells[j,i]:=VarToStr(ArrayData [i,j]);//заполняем таблицу

Просто ради интереса, а сколько выполняется

Excel := CreateOleObject(xlsAppName);
Excel.Workbooks.open(OpenDialog1.FileName);
WorkSheet := Excel.Workbooks[1].WorkSheets[1];
Excel.EnableEvents := false; //отключаем обработку событий в Excel
Excel.visible:=false;
ArrayData := VarArrayCreate([1,worksheet.UsedRange.Columns.count,1,worksheet.UsedRange.Rows.count], varVariant);
Range := WorkSheet.Range[worksheet.cells[1,1], worksheet.cells[worksheet.UsedRange.rows.count,worksheet.UsedRange.columns.count] ];
ArrayData:=Range.value;


 
Michail Dalakov ©   (2003-11-29 14:36) [2]

Попробуй сколько выполняется
for J := 1 to worksheet.UsedRange.Columns.count do
for i := 1 to worksheet.UsedRange.Rows.count do
StringGrid1.Cells[j,i]:="";//заполняем таблицу

Если время значительно лучше, можно играться дальше.
Во-первых не делать каждый раз преобразование VarToStr, во
вторых следует залочить вариант VarArrayLock():Pointer,
сделать все необходимое и затем вызвать VarArrayUnlock()


 
Frag   (2003-11-29 17:33) [3]

Объясните, мне глупому, как точно в D7 померять время(как-то вроде можно в Debugger`e). А насчёт времени, сужу по тому, что через Ctrl+Alt+Del смотрю статистику выделения времени определённому процессу(в XP % загрузки процессора определённым процессом). Так вот Excel`ю время это выжеляется сначала, а потом через мгновение уходит в ноль, а вот мой процесс продолжает жрать процессорное время на 99%. Тем более в StringGride полосы прокрутки появляются практически сразу после запуска обработки, ИМХО это свидетельствует о том, что работа происходит с таблицей.


 
Anatoly Podgoretsky ©   (2003-11-29 17:40) [4]

Раз возникла необходимость мерить время, то можно не беспокоиться ни о какой оптимизации, а если операция занимает много времени, то хватает обычных часов с секундной стрелкой.


 
Michail Dalakov ©   (2003-11-29 17:52) [5]

И все-таки?

var t:TdateTime;
begin
t:=Time;

...

ShowMessage(FormatDateTime("hh:nn:ss.zzz",time-t));
end;


 
Frag   (2003-12-04 10:39) [6]

Как соззать указатель на залоченный вариантный массив, если число элементов массива заранее не известно?


 
Chris   (2003-12-04 10:56) [7]

Сделай такой вариант:
Перед загрузкой выключи StringGrid => StringGrid1.Visible:=False;
а после загрузки => StringGrid1.Visible:=True;
Проблема в том, что при изменении ячейки происходит ее прорисовка с обновлением StringGrid, а это лишнее время...



Страницы: 1 вся ветка

Текущий архив: 2003.12.26;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.022 c
14-86508
noj
2003-12-04 12:40
2003.12.26
Возможно ли отключение винчестеров без RAID


14-86498
Undert
2003-12-05 13:52
2003.12.26
Javascript/HTML


14-86506
SPeller
2003-12-04 11:28
2003.12.26
Internet Explorer 6 Service Pack 1


3-86280
Bless
2003-12-02 11:01
2003.12.26
Сработал ли post?


14-86509
Думкин
2003-12-05 05:15
2003.12.26
С днем рождения! 5 декабря.