-
Толком с Excel никогда не работал, а тут довольно сложный по структуре отчёт надо сделать. Т.е. не просто некий VarArray в некий Range запихнуть, но ещё и потом отформатировать. Делается всё это дело достаточно долго. После профилирования выяснил, что наиболее длительная операция - собственно выделение Range. Вот в связи с этим вопрос: выделяю я range так:
var
WS: _Worksheet;
aRange: ExcelRange;
begin
aRange := WS.Range[WS.cells.Items[x1, y1], WS.cells.Items[x2, y2]];
end;
Может я что-то делаю не так? Ну казалось бы, что проще кусок в строчку определить? С Excel напрямую работал стопицот лет назад (можно сказать, что вообще не работал толком).
-
1. установлено? Ёксель.EnableEvents := false
2. если разбить на части? Cell1 := Sheet.Cells[BR, BC]; Cell2 := Sheet.Cells[ER, EC]; Range := Sheet.Range[Cell1, Cell2];
-
> Ega23 © (01.07.13 13:01)
просто замечу, что если это будет под службой, то про OLE (или как оно сейчас там - COM/DCOM) вообще придется забыть...
-
Могу скинуть модулёк, который при желании может сохранить xml-ку, которую можно будет подпихнуть ёкселю. Но она без комментариев.
-
> Ёксель.EnableEvents := false
Не повлияло.
> если разбить на части? > Cell1 := Sheet.Cells[BR, BC]; > Cell2 := Sheet.Cells[ER, EC]; > Range := Sheet.Range[Cell1, Cell2]; >
Не вижу особого смысла, но попробую...
> просто замечу, что если это будет под службой
Нет, не будет. Но спасибо за инфу.
> Могу скинуть модулёк, который при желании может сохранить > xml-ку, которую можно будет подпихнуть ёкселю.
Нет, спасибо, я думал на ентот счёт, но отказался.
-
> Ega23 © (01.07.13 13:28) [4] > > Могу скинуть модулёк, который при желании может сохранить > > xml-ку, которую можно будет подпихнуть ёкселю. > Нет, спасибо, я думал на ентот счёт, но отказался.
А здря... Димка плохого не посоветует. Если версия офиса 2003 и старше, то это наилучший способ.
-
Я может быть не так сформулировал. Данные передаются мгновенно через VarArray, с этим вопросов нет. Вопрос с последующим форматированием данных: некоторые ячейки надо объединить, в некоторых - поменять фонт, и т.п.
-
> Нет, спасибо, я думал на ентот счёт, но отказался.
Я тоже поначалу отказался. Но потом, когда после пяти минут расчётов отчёт генерировался полчаса, я на это всё это OLE забил, просидел недельку над изучением предмета и навоял модуль. Теперь всё летает. Ну или почти летает.
-
> Вопрос с последующим форматированием данных: некоторые ячейки > надо объединить, в некоторых - поменять фонт, и т.п.
Всё это имеет место в модуле. Практически все возможности форматирования.
-
> Ega23 © (01.07.13 13:33) [6] > Я может быть не так сформулировал. > Данные передаются мгновенно через VarArray, с этим вопросов нет. > Вопрос с последующим форматированием данных: некоторые ячейки надо объединить, в некоторых - поменять фонт, и т.п.
Дык я об чем. Это форматирование лучше задавать через XML.
-
>> Dimka Maslov © а ,давай :) гляну
-
> Dimka Maslov © (01.07.13 13:36) [8] > Всё это имеет место в модуле. Практически все возможности форматирования.
Димка - кинь линк на скачку, может и мне волшебный модулек сгодиться. А то этому упоротому пока докажешь...
-
> Я тоже поначалу отказался. Но потом, когда после пяти минут > расчётов отчёт генерировался полчаса, я на это всё это OLE > забил, просидел недельку над изучением предмета и навоял > модуль. Теперь всё летает. Ну или почти летает.
Да? ХМ, любопытно. Тогда давай, скидывай, ежели не жалко.
-
> Если версия офиса 2003 и старше, то это наилучший способ.
Были сомнения, что 2003. Сейчас подтвердили, что ниже 2003 не поддерживаем.
-
http://www.daemys.com/f/xml.zipНо знайте: 1. Протестирован под Delphi 2009. 2. Отжирает память при работе. 3. Без гарантии. 4. Пожалуйста, не спрашивайте, что там, как и почему, попытайтесь разобраться самостоятельно. 5. Читать он не умеет, только создавать. 6. У Ёкселя чавый отладчик - говорит, что проблема в таком-то теге, не утруждая себя показом конкретного места в файле. Работает следующим образом: Создаём объект класса TXlWorkbook, затем сколько надо TXlWorksheet, у них есть ячейки TXlCell, у ячейки есть Style со всеми необходимыми свойствами Color, Borders, Alignment, Font. Кроме того есть Value (строковое), Numeric (числовое), IsHtml - если есть верхние и нижние символы (задаются внутри <Sub> </Sub> <Sup> </Sup> в Value), для объединения ячеек используются св-ва MergeDown и MergeAcross. Сохранение Workbook происходит двумя путями - через Flush (с созданием промежуточной xml-структуры в памяти), но лучше пользоваться FlushStream - прямое создание документа в поток. Если объеднялись ячейки, требуется перед сохранением вызвать RemoveMergedCells. Пример дать не могу.
-
"прямую адресацию" попробуй Sheet.Range[Char(k+Byte('A'))+IntToStr(j+2)].NumberFormat:= '@';
|