Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-86341
TUser
2003-12-10 12:48
2003.12.26
Hook


3-86271
GIL
2003-11-21 12:25
2003.12.26
поля подстановки в interbase


1-86410
Rudy
2003-12-14 09:44
2003.12.26
Как TShellListView заставить отображать только файлы определённог


14-86539
ИдиотЪ
2003-12-03 09:35
2003.12.26
нужны словари


14-86519
NeyroSpace
2003-12-03 11:54
2003.12.26
Проапгрейтился... до коматоза





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский