28.05.2004, 15:49 | #1 |
Гость
|
Excel быстрый вывод
Вывод целой строкой много обсуждался, но готового рецепта я не нашел.
После экспериментов выкладываю работающий вариант (а то не по себе уже стало, что все спрашиваю, а пользы сообществу аксаптеров не приношу). Это для еще более начинающих чем я. PHP код:
|
|
28.05.2004, 17:26 | #2 |
Участник
|
спасибо.
не возражаете, если я перемещу в раздел проекты? |
|
31.05.2004, 11:01 | #3 |
Гость
|
Ok
Ok
|
|
31.05.2004, 11:50 | #4 |
Участник
|
Если передавать в Excel только строковые значения, то можно сразу создать соответствующий массив:
PHP код:
|
|
01.06.2004, 13:10 | #5 |
Гость
|
Буфер обмена
Пробовал я выводить через буфер обмена, используя примеры с форума.
Но в них вывод производится вообще поячеечно, что медленне чем построчно. Или я не те примеры смотрел? Можно в этом обсуждении еще раз описать вывод многострочного range через буфер обмена? |
|
01.06.2004, 15:07 | #6 |
Участник
|
Про буфер обмена писали например здесь:
http://www.axforum.info/forums/showt...4163#post24163 Но проще делать не через WinAPI, а использую TextBuffer. Если кратко, то алгоритм такой: Формируем текст, в котором значения в строке разделены табами (\t), а строки (\n). Помещаем его в буфер обмена. PHP код:
|
|
01.06.2004, 17:17 | #7 |
Гость
|
Попробовал
Действительно быстрее и быть не может.
А с форматированием разбирались? Я в шаблоне делаю нужное форматирование на первой строке таблицы и на дополнительные строки его переношу копируя и вставляя целую строку. Если выводить построчно это не страшно, т.к. и так процесс формирования не мгновенен, а в свете использования вставки целых range, придется разбираться и с форматированием. Вы в tlb файлах смотрите значения констант и форматы вызова функций Excel? |
|
01.06.2004, 20:57 | #8 |
Участник
|
зачем?
значения между ячейками разделяются симовлом \t так например PHP код:
|
|
02.06.2004, 12:09 | #9 |
Участник
|
В Excel есть замечательный "пишущий плейер". Правда он не всегда генерит правильный код. Если отдебагерить полученный макрос, то можно и значения констант посмотреть...
|
|
02.06.2004, 12:43 | #10 |
Гость
|
Нашел ;-)
Я у себя открыл в Delphi файл Excel9.olb (Excel2000 типа), там есть и константы и методы с описанием параметров. Так что запись макросов + Type Library Editor - это сила.
Будем разбираться дальше ... |
|
02.06.2004, 13:08 | #11 |
Участник
|
Информация к размышлению....
только что нашел что: (набросок класса для формирования html в аттаче) excel при вставке из буффера обмена отлично понимает html со всем фолрматированием <html> <body> <table border=2> <tr bgcolor=#ff0000><td colspan=2><b>Header </b></td></tr> <tr bgcolor=#c7c7c7><td align=left>col1</td><td align=right>col2</td></tr> </table> </body> </html> |
|
02.06.2004, 13:11 | #12 |
Участник
|
сорри в пред сообщении html обработался
это было : PHP код:
|
|
02.06.2004, 13:52 | #13 |
Гость
|
Полезное обсуждение получается
html форматирование в коде аксапты прикольно наверное смотрится,
только трудоемкость выше получается Вот пример как копировать форматирование из range в range: здесь одна строка дублируется CurRow-1 раз вместе со всем форматированием. XLSrange = COMCell.Range('A6:L6'); XLSrangeTo = COMCell.Range('A6:L'+int2str(CurRow-1)); XLSrange.select(); XLSrange.AutoFill(XLSrangeTo,0); Т.е. создаем файл на основе шаблона, в котором одна строка отформатирована как следует и с помощью AutoFill распространяем форматирование на нужный range |
|
02.06.2004, 15:08 | #14 |
Участник
|
Согласен.
Но работа с range сильно тормозит а когда надо выводить отчеты с подитогами соответственно разным объединением ячеек по строкам, HTML кажется более предпочтительным вариантом а то что трудоемко это зря вот пример кода PHP код:
|
|
03.06.2004, 12:23 | #15 |
Участник
|
В частности для облегчения вывода промежуточных итогов по строкам я сделал класс двумерного массива
http://www.axforum.info/forums/showt...&threadid=5263 Файл RTG_2DimArray (который очень не нравится mazzy) Т.е. я предварительно заполняю этот массив, а потом одной командой заполняю весь лист EXCEL через буфер обмена. Потом остается только отформатировать лист, если необходимо. |
|