![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
передача данных из БД в Microsoft Excel [D7, Paradox]
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] и этим. Хотя бы для того, чтобы вставить формулы или прочертить границы.