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

Вниз

Быстродействие Excel   Найти похожие ветки 

 
ai ©   (2004-04-01 13:17) [0]

При работе с Excel можно использовать vararray для получения/задания данных Range следующим образом Data := Range[...].Value.
Как получать/задавать значения атрибутов Range (шрифты, условное форматировние, рамки,...) в виде vararray?
При получении/задании атрибутов Range по одной ячейке быстродействие слишком уж низкое.


 
Романов Р.В. ©   (2004-04-01 13:24) [1]

vararray тут не причем. Определи диапазон ячеек и задай ему нужные атрибуты.

procedure SetEdge(Range: OleVariant);
begin
 Range.Borders[xlEdgeLeft].LineStyle := xlContinuous;
 Range.Borders[xlEdgeLeft].Weight := xlMedium;
 Range.Borders[xlEdgeTop].LineStyle := xlContinuous;
 Range.Borders[xlEdgeTop].Weight := xlMedium;
 Range.Borders[xlEdgeBottom].LineStyle := xlContinuous;
 Range.Borders[xlEdgeBottom].Weight := xlMedium;
 Range.Borders[xlEdgeRight].LineStyle := xlContinuous;
 Range.Borders[xlEdgeRight].Weight := xlMedium;
 if Range.Columns.Count > 1 then
 begin
   Range.Borders[xlInsideVertical].LineStyle := xlContinuous;
   Range.Borders[xlInsideVertical].Weight := xlThin;
 end;
 if Range.Rows.Count > 1 then
 begin
   Range.Borders[xlInsideHorizontal].LineStyle := xlContinuous;
   Range.Borders[xlInsideHorizontal].Weight := xlThin;
 end;
end;


 
ai ©   (2004-04-01 13:40) [2]

У меня следующая специфика задачи - нужно считать данные и атрибуты со страницы Excel, произвести определенные изменения и записать все на страницу обратно. Причем объем исходной и результирующей страниц достаточно большие.
Изначально все изменения проводились средствами Excel через COM, но за счет того что Excel выполняется в другом адресном простанстве на межпроцесное взаимодействие тратится очень много времени. Так операция Range.Copy() выполняется 10мс, Sheet.InsertRows 6мс для небольших объемов данных, в то же время при использовании ActiveX компонента Formula1, на подобные операции тратится в больше чем 1000 раз меньше времени.
Поэтому я хочу считать все данные с атрибутами, произвести необходимые изменения в памяти и "загнать" все назад.


 
Тимохов ©   (2004-04-01 13:49) [3]

офис какой?
Если 2003, хр, или 2002, то можно делать через xml - очень быстро.


 
ai ©   (2004-04-01 13:55) [4]

Шел расчет на поддержку 98-го и выше, но в случае если через xml - действительно очень быстро :), то можно забить и перевести всех в добробольно принудительном порядке на 2003, хр, или 2002.
Можешь расказать подробнее как?


 
Тимохов ©   (2004-04-01 13:59) [5]


> ai ©   (01.04.04 13:55) [4]

подробнее не могу - долго, скорее не реально.
вот доки по схемам офиса.
изучай.

http://www.microsoft.com/office/xml/default.mspx

http://www.microsoft.com/downloads/details.aspx?FamilyId=FE118952-3547-420A-A412-00A2662442D9&displaylang=en

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnexcl2k2/html/odc_xmlss.asp

используй msxml парсер. он у тебя уже стоит.



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

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

Наверх




Память: 0.48 MB
Время: 0.03 c
1-1080848309
Vit
2004-04-01 23:38
2004.04.18
ini-файл


3-1079765456
Jioniro
2004-03-20 09:50
2004.04.18
Отображение в DbGride значений из двух таблиц!


4-1076939282
sucer
2004-02-16 16:48
2004.04.18
Как из DELPHI открыть *.htm файл в новом окне IE?


8-1073708570
vidiv
2004-01-10 07:22
2004.04.18
Как загрузить PNG в TBitMap


1-1080892540
Серж
2004-04-02 11:55
2004.04.18
Макроподстановка кода(!) в Delphi?