Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];

Вниз

передача данных из БД в Microsoft Excel   Найти похожие ветки 

 
franchuk   (2006-01-11 18:20) [0]

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


 
mr.il ©   (2006-01-11 18:41) [1]

var
 XL_2 : Variant;
 _Rov : Integer;
begin with DM_Zakaz, AForm do begin

 XL_2 := CreateOleObject("Excel.Application");
 XL_2.Workbooks.Add("твой путь\ZakazBlank.XLT");

 XL_2.Range["A1"].Value := "Бланк-заказ № "+IntToStr(IBQ_Zakaz["ZAKAZ_ID"]);
 XL_2.Range["A4"].Value := "Дата составления: "+DateToStr(IBQ_Zakaz["Date_Doc"]);
 XL_2.Range["A5"].Value := "Поставщик: "+_NotNullStr(IBQ_ZakazZakazName.Value);
 IBQ_ZakazData.First; _Rov := 8;
 while not IBQ_ZakazData.Eof do begin
   if _NotNullCurr(IBQ_ZakazData["Quant_Z"]) > 0 then begin
     XL_2.Range["A"+IntToStr(_Rov)].Value := _Rov-7;
     XL_2.Range["B"+IntToStr(_Rov)].Value := _NotNullStr(IBQ_ZakazData["PROD_NAME"]);
     XL_2.Range["C"+IntToStr(_Rov)].Value := CurrToStr(IBQ_ZakazData["Quant_Z"]);
...
...
 XL_2.Run("myAutoFill");//запуск макроса если надо
 XL_2.Visible:=True;
{
визуализацию можешь сделать сразу после этого:
 XL_2.Workbooks.Add("твой путь\ZakazBlank.XLT");
тогда увидишь результаты вывода но будет тормознее
}


 
DimonS ©   (2006-01-12 02:45) [2]

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


 
mr.il ©   (2006-01-12 07:23) [3]

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


 
DimonS ©   (2006-01-12 08:58) [4]

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

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


 
mr.il ©   (2006-01-12 10:25) [5]

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


 
DimonS ©   (2006-01-12 11:20) [6]

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

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


 
mr.il ©   (2006-01-12 11:43) [7]


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

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


 
DimonS ©   (2006-01-12 12:04) [8]

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


 
mr.il ©   (2006-01-12 12:11) [9]


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

Эта да.


 
DimonS ©   (2006-01-12 12:19) [10]

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


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

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

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


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


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

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


 
DimonS ©   (2006-01-12 12:40) [13]

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


 
sniknik ©   (2006-01-12 13:51) [14]

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

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


 
mr.il ©   (2006-01-12 13:57) [15]

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


 
DimonS ©   (2006-01-12 14:15) [16]

то sniknik ©

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


 
sniknik ©   (2006-01-12 16:02) [17]

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

> 2. Запости пожалуйста код, а то недоврубаюсь. :(
код постить опасно... сам смотри
http://delphimaster.net/view/2-1136805696/

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


 
DimonS ©   (2006-01-12 16:23) [18]

Не нашел.

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

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


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

> 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), заодно и условие обработаеш (подготовить надо только то что требуется для "заливки"), все одно быстрее будет, и намного, т.к. всю подготовку ты у себя в программе сделаеш. (пример с массивом навскидку написать не могу, т.к. не пользуюсь, а тест делать времени нет(ломает). поищи. или сам попробуй, там просто все)


 
sniknik ©   (2006-01-12 17:35) [20]

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


 
mr.il ©   (2006-01-12 18:13) [21]

Ну спасибо.



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

Форум: "Базы";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.014 c
2-1139728029
Алексей Петухов
2006-02-12 10:07
2006.03.05
PostMessage?


1-1138615756
nastya
2006-01-30 13:09
2006.03.05
Вид компонента в design-time


3-1136907278
alsov
2006-01-10 18:34
2006.03.05
XML с удаленного сервера как результат селекта


1-1138959745
-=Fes=-
2006-02-03 12:42
2006.03.05
FileExists в Delphi 2005


15-1138131982
Petr V. Abramov
2006-01-24 22:46
2006.03.05
Прощай, duailup дубль N :)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский