Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];

Вниз

Жуткие тормоза при отправке данных в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.033 c
14-1117107743
Anics
2005-05-26 15:42
2005.06.14
Поделитесь, кто знает компоненты работы с БД в виде дерева, как э


10-1093539136
Лана Розанова
2004-08-26 20:52
2005.06.14
Проблемы с COM


6-1111963806
АНТИСпаммер
2005-03-28 02:50
2005.06.14
Сниффинг локального траффика


1-1117111852
<Lelik>
2005-05-26 16:50
2005.06.14
про поиск компонентов


6-1111769393
Radgar
2005-03-25 19:49
2005.06.14
Активность у массива TServerSocket





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский