Форум: "Основная";
Текущий архив: 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