Форум: "Базы";
Текущий архив: 2003.12.26;
Скачать: [xml.tar.bz2];
ВнизЗагрузка из 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.011 c