Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

передача данных из БД в Microsoft Excel [D7, Paradox]


Страницы:   1 2

franchuk ©   (2006-01-11 18:20:00) 

Как из существующего(отображеного) набора данных передать данные в уже существующий(созданый шаблон) файл  Microsoft Excel.
погжайлуста по возможности отвветьте - очень срочно надо, но ответа нигде не могу найти!!!


mr.il   (2006-01-12 18:13:00) [1]

Ну спасибо.


sniknik   (2006-01-12 17:35:00) [2]

с массивом
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=502


sniknik   (2006-01-12 17:19:00) [3]

> ADODataSet.CommandText:= 'SELECT f_key FROM TC_ROUTE_STRING_IZV WHERE izv=:obozn ORDER BY f_key';
> ADODataSet.Parameters.ParamByName('obozn').Value:='31.0001-05';
> ADODataSet.Open;

> ExcelApplication1.Workbooks.Add(EmptyParam,0);
> ExcelApplication1.Cells[1,1]. CopyFromRecordset(ADODataSet.Recordset);

весь рекордсет зараз... но только ADO-шный понимает (как раз по мне, только с ADO и работаю практически). а у вас там вроде с закладки InterBase используется... тут или перекладывать в ADO-шный, либо в вариантный массив (и использовать тогда функцию Copy), заодно и условие обработаеш (подготовить надо только то что требуется для "заливки"), все одно быстрее будет, и намного, т.к. всю подготовку ты у себя в программе сделаеш. (пример с массивом навскидку написать не могу, т.к. не пользуюсь, а тест делать времени нет(ломает). поищи. или сам попробуй, там просто все)


DimonS   (2006-01-12 16:23:00) [4]

Не нашел.

Или я тупой, или....

Объясни, плз, как можно во во время расчета в сводной таблице, в смысле после расчета каждойячейки, выдать их сразу одной функцией в Ексель? Причем, КАЖДАЯ ячейка расчитывается по-своему.


sniknik   (2006-01-12 16:02:00) [5]

> 1. XL_2 := CreateOleObject('Excel.Application'); выполняется не в цикле
имею ввиду любое последующее обращение к XL_2, это же запрос к екселю как серверу автоматизации (вот именно их и надо минимизировать. эти обращения )

> 2. Запости пожалуйста код, а то недоврубаюсь. :(
код постить опасно... сам смотри
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1136805696&n=18

там как раз пример, вместо цикла один вызов функции.


DimonS   (2006-01-12 14:15:00) [6]

то sniknik ©

Насчет Екселя.
Я так и делаю, но ТОЛЬКО! для оформления (типа границ ячеек) и для формул (их, конечно, проще вставить на всю таблицу или нужный диапазон). А вот насчет перенесения данных из массива... Покажите, плз, пример, просто не понял, как это можно к екселю применить НЕ в цикле.


mr.il   (2006-01-12 13:57:00) [7]

Ну
1. XL_2 := CreateOleObject('Excel.Application'); выполняется не в цикле
2. Запости пожалуйста код, а то недоврубаюсь. :(


sniknik   (2006-01-12 13:51:00) [8]

ну это "образно", может термина такого и нет по отношению к excel. смысл в чем, надо тебе к примеру данные вставить, всталяеш одной командой уже подготовленные из рекордсета или вариантного массива, а не в цикле поячеечно множество раз "дергая" ecxel. (эти вызовы самое длительное и есть. т.е. вставить 500 позиций (примерно) из вариантного массива и одну неважно как по времени будет одно и тоже (на фоне вызова внос что 1 что 500 не различим))
точно также с оформлением, не применять к каждой ячейки, а определять ... (как это по русски ;) range и применять стиль к группам ячеек.
в обшем минимизировать как только можно сами вызовы, обращения к excel-ю.

вот к примеру в mr.il ©   (11.01.06 18:41) [1] есть цикл, перебор таблици, а в нем обращения к XL_2 (Excel.Application), если его убрать сначала подготовив вариантный массив а после сделать загрузку в excel одной командой copy, (или CopyFromRecordset как обычно сам делаю) и время сократится намного.


DimonS   (2006-01-12 12:40:00) [9]

Хм...
Интересно.
Даже не встречал про пакетные обработки.
Поподробнее можно?


mr.il   (2006-01-12 12:36:00) [10]


> надо пакетные обработки делать, а не позаписьно с каждой
> ячейкой. будет быстрей

2 sniknik.  А по подробнее???? PLZ.


sniknik   (2006-01-12 12:27:00) [11]

>> Да и довольно сильно тормозит Ексель.
> Эта да.

надо пакетные обработки делать, а не позаписьно с каждой ячейкой. будет быстрей
к примеру у меня отчет на 1,5тыс строк. 8 полей в таблице (даных в сумме на ширину листа), на 2000гц селероне. в эксель выводится за 5-8сек. по моему нормально.


DimonS   (2006-01-12 12:19:00) [12]

Кстати, я в данный момент пробовал перевести все отчеты в FastReport. И вот именно такие большие и не получается. Зато небольшие по сравнению с екселем "летают", доли секунды занимают времени. Так что если не решил еще в чем выводить отчеты, то посмотри на другие "отчетники", типа QuikReport, FastReport, и т. д. QReport, который встроенный, крайне не рекомендую.


mr.il   (2006-01-12 12:11:00) [13]


> Да и довольно сильно тормозит Ексель.

Эта да.


DimonS   (2006-01-12 12:04:00) [14]

Я про удобство ничего и не говорю. Я и в Ворд многое вывожу. Я про то, что для программера много камушков имеется. Вот и все. Да и довольно сильно тормозит Ексель. Особенно при выводе больших отчетеов. Много ресурсов кушает, тут уж никуда не денешься.


mr.il   (2006-01-12 11:43:00) [15]


> ...Нужно следить,
>  чтобы он небыл запущен предварительно, чтобы не закрыл
> юзверь его при просмотре и т. д.

В моем варианте ничего подобного. 20 страниц это мелочь. Зато его легко и непринужденно можно отправить по электронке. И ваще потом из эксэля делай че хош. Да и дизайнить эксэлевский шаблон приятнее.


DimonS   (2006-01-12 11:20:00) [16]

Просто у меня сейчас выводятся табличные данные в ексель, в которых в конечном отчете может быть от 2 до 20 страниц. Тут уже макросом не особо справишься :)

А вообще, это отстой - выводить в ексель. Нужно следить, чтобы он небыл запущен предварительно, чтобы не закрыл юзверь его при просмотре и т. д.


mr.il   (2006-01-12 10:25:00) [17]

Когда я незнаю точно как реализовать "оформление" эксэль документа, вывожу данные в пустой шаблон, а потом запускаю запись макроса и начинаю документ "оформлять" в ручную, затем смотрю макрос и переделываю его под себя.
Хочу уточнить. Под оформлением я понимаю разного рода дорасчеты (промежуточные итоги к примеру) или динамическую окантовку. Если-же документ статический (т.е. свойства ячеек не зависят от значений), то все настройки (ширин, фонтов, выравниваний, окантовок и т.д.) задаю в шаблоне изначально.
И еще. Довольно удобно бывает вынести отчет из приложения прямо в эксэль. Т.е. сам эксэль запрашивает НД и крутит его.


DimonS   (2006-01-12 08:58:00) [18]

ТО mr.il ©
А если таблица неизвестного размера в высоту и ширину, то как это в макросе отразить?

Хотя идея неплохая, можно выходной файл в любом месте задавать по выбору юзера.


mr.il   (2006-01-12 07:23:00) [19]

Я обычно "оформление" вешаю в макрос и запускаю его перед отображением.


DimonS   (2006-01-12 02:45:00) [20]

Еще можно использовать ExcelApplication с закладки Servers дельфей. Я делал много выводов в Ексель, обычно приходится пользоваться и [1] и этим. Хотя бы для того, чтобы вставить формулы или прочертить границы.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо