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

Вниз

Жуткие тормоза при отправке данных в Excel   Найти похожие ветки 

 
Scorpio ©   (2005-05-26 10:34) [0]

Добрй день мастера, подскажите, произвожу обработку базы, данные кидаю в массив, потом мне этот массив нужно отправить в Excel, но проблема в том что он 2 листа отправляет 18 минут, это можно как то ускорить ???
  массив [96,10]
  Офис XP


 
NightStranger ©   (2005-05-26 10:36) [1]

Каким образом ты отправляешь данные?


 
Digitman ©   (2005-05-26 10:37) [2]


> произвожу обработку базы


напильником ?


 
Scorpio ©   (2005-05-26 10:45) [3]

XLS := CreateOleObject("Excel.Application");
app := XLS.Workbooks.Open(pat1+"\rasl.xls");

       for i := 1 to 96 do
          begin
//                for j := 1 to 10 do
                  begin
                       if i <= 51 then
//                          if zar[i,j] <> 0 then
                           begin
                                if zar[i,1] <> 0 then
                                  xls.worksheets["????1"].Cells[i+5,2].Value:=zar[i,1];
                                if zar[i,2] <> 0 then
                                  xls.worksheets["????1"].Cells[i+5,3].Value:=zar[i,2];
                                if zar[i,3] <> 0 then
                                  xls.worksheets["????1"].Cells[i+5,4].Value:=zar[i,3];
                                if zar[i,4] <> 0 then
                                  xls.worksheets["????1"].Cells[i+5,5].Value:=zar[i,4];
                                if zar[i,5] <> 0 then
                                  xls.worksheets["????1"].Cells[i+5,6].Value:=zar[i,5];
                                if zar[i,6] <> 0 then
                                  xls.worksheets["????1"].Cells[i+5,7].Value:=zar[i,6];
                                if zar[i,7] <> 0 then
                                  xls.worksheets["????1"].Cells[i+5,8].Value:=zar[i,7];
                                if zar[i,8] <> 0 then
                                  xls.worksheets["????1"].Cells[i+5,9].Value:=zar[i,8];
                                if zar[i,9] <> 0 then
                                  xls.worksheets["????1"].Cells[i+5,10].Value:=zar[i,9];
                                if (zar[i,8] <> 0) and (zar[i,9] <> 0) then
                                  xls.worksheets["????1"].Cells[i+5,11].Value:=(zar[i,8] + zar[i,9]) / zar[i,1];
                           end;

Вначале пробовал полностью в цикле, потом построчно, все равно тормозит.


 
Bel ©   (2005-05-26 10:55) [4]

Формируй один вариантный массив и отправляй его в Excel.


 
scorpio ©   (2005-05-26 11:03) [5]

непонял, это как ??


 
Digitman ©   (2005-05-26 11:05) [6]


> Жуткие тормоза при отправке данных в Excel


эти "тормоза" у тебя включаются при каждом обращении вида

xls.worksheets[..].Cells[..].Value :=

и фактор это совершенно объективный.

но если ты сформируешь вариантный массив, описывающий разом ВСЕ значения ячеек в нужном диапазоне, то "тормоза" вместо i x j раз включатся у тебя один-единственный раз :

xls.worksheets[..].Range[XXXX].Value := олей-вариантный-массив_ТОЙ_же_размерности_что_и_ХХХХ


 
Amoeba ©   (2005-05-26 11:06) [7]

Ищи на http://www.delphikingdom.com цикл статей "По волнам интеграции". Найдешь там массу полезного.


 
HSolo ©   (2005-05-26 11:11) [8]

http://www.delphikingdom.com/asp/viewitem.asp?catalogid=313


 
dmitry501 ©   (2005-05-26 11:13) [9]

А может кто знает, как можно таким же образом и оформление, формат и формулы ячеек описать? Т.е. не отдельно каждую ячейку в цикле, а также - Range?


 
Erik1 ©   (2005-05-26 11:58) [10]

А еще проще взять компонент который знает формат файла Excel. Тогда даже при отсутствии excel все будет работать.


 
evvcom ©   (2005-05-26 12:01) [11]


> А еще проще взять компонент который знает формат файла Excel

И после очередного выхода новой версии Excel программа работать перестанет. Поздравляю вас, товарищи!


 
scorpio ©   (2005-05-26 12:22) [12]

а этот компонент, его отдельно надо выискивать, или он есть в Delphi 7 ??


 
evvcom ©   (2005-05-26 13:50) [13]

в Delphi 7 его нет и слава богу


 
Amoeba ©   (2005-05-26 13:50) [14]


> scorpio ©   (26.05.05 12:22) [12]
> а этот компонент, его отдельно надо выискивать, или он есть
> в Delphi 7 ??

Разумеется, отдельно.


 
Суслик ©   (2005-05-26 14:24) [15]


>  [11] evvcom ©   (26.05.05 12:01)

это ты зря
сейчас текущая версия формата biff8x.
При этом существующий excel радостно читает все предыдущие форматы, начиная с biff2.

Так что обратная совместимость, нас спасет.

Я уже год сижу на своем (сам написал) экспорте в biff8. Пока проблем ни на одном из офисов, который понимает biff8 (2000, xp, 2003, также вроде 97) я не видел.

С какой стати новый офис должен быть несовместим со старым? Они (ms) идиоты что ли?


 
evvcom ©   (2005-05-26 14:50) [16]


> Суслик ©   (26.05.05 14:24) [15]

А что Excel может использоваться только в одну сторону?

Хотя, конечно, выход есть всегда. Самое главное, что мне не нравится в таких компонентах - это вероятность выхода новых версий (с поддержкой новых версий как Excel, так и Delphi). Имхо.


 
Суслик ©   (2005-05-26 14:54) [17]


>  [16] evvcom ©   (26.05.05 14:50)

мне нужно выкачивать В excel.
ИЗ excel мне данные брать не нужно.

Мне тоже не нравится с бинарниками возиться, благо и сложно это. Есно я сам не дебужил формал (не умею) - я пользоваться описанием из openoffice. Но все равно месяц работы это заняло. Зато теперь проблем не знаю: 10000 сток и 10 столбцов с форматированием - за 20 секунд.


 
evvcom ©   (2005-05-26 15:49) [18]


> 10000 сток и 10 столбцов с форматированием

а через OLE-вариантные массивы в Excel не пробовал кидать те же данные для сравнения? Я думаю не медленнее получится, а если и медленне, то не намного. Имхо.


 
Суслик ©   (2005-05-26 15:56) [19]


>  [18] evvcom ©   (26.05.05 15:49)

С форматированием!!!?


 
Суслик ©   (2005-05-26 15:59) [20]


> [18] evvcom ©   (26.05.05 15:49)

На самом деле не сравнивал. Но разница еще и в том, что при большой заполненности листа на несильных (памяти, например маловато) компах становится трудно работать: excel пытается все сделать в памяти. Я же сразу кидаю на диск, причем последовательно. При этом у excel есть однозначная заточенность на числа. Он умеет хорошо и оптимально хранить числа, со стоками дело хуже. Поэтому если на листе в основном строки, то тормозит сильнее.


 
френк   (2005-05-26 16:02) [21]

может поделишься компонентиком? за огромное спасибо и соблюдение всех твоих копилефтов =)


 
Суслик ©   (2005-05-26 16:04) [22]


>  [21] френк   (26.05.05 16:02)

не поделюсь, не потому, что жаль, а потому, что это не компонент, а класс (вернее иерархия классов), который глубоко интегрирован в большущий проект.

Я занимаюсь сейчас выделением этого инструемента в компонент, но когда доделаю не знаю :(


 
evvcom ©   (2005-05-26 17:16) [23]


> С форматированием!!!?

Если форматирование для столбца одинаково, то делается это за доли секунды в Excel.


 
Суслик ©   (2005-05-26 17:29) [24]

Хочется поспорить, доказав примером конкретного файла excel, который точно не сделаешь за доли секунды через ole. Но беда, что они все представляют коммерческую тайну...

Так что у меня аргументов нет (((


 
programania ©   (2005-05-26 20:20) [25]

Вот еще программа есть:
http://programania.com/vtkexp.zip   157kb
подключается просто в uses,
не использует Excel и потому быстро, может рамки шрифты цвета и т.д.
прилагаются исходники, пример со всеми возможностями и русское описание,
хотя сам я пишу в Excel и Word через html  что тоже быстро.



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

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

Наверх




Память: 0.53 MB
Время: 0.033 c
14-1117090203
Prohodil Mimo
2005-05-26 10:50
2005.06.14
По просьбе Автомодератора


1-1116952290
HI
2005-05-24 20:31
2005.06.14
Параметры страницы в RichEdit


1-1117447228
bearoman
2005-05-30 14:00
2005.06.14
изменеие размера контрола


3-1115472409
Dmitry
2005-05-07 17:26
2005.06.14
Как заставить обновить результат запроса в базе, а не в памяти.


1-1116987627
810
2005-05-25 06:20
2005.06.14
Посимвольно формировать String