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

Вниз

Передача DataSource в Excel.   Найти похожие ветки 

 
Neket   (2009-02-28 16:01) [0]

Добрый день. Подскажите пожалуста как правильно передать данные загруженные из БД в DataSource. Примера куска кода будет достаточно. Заранее благодарен.


 
Palladin ©   (2009-02-28 16:02) [1]

Расшифруй слово "передать"


 
Neket   (2009-02-28 16:03) [2]

Оййй ё... Блин чета не то написал.
Всмысле как данные из DataSource1 в Excel прогрузить.


 
Palladin ©   (2009-02-28 16:04) [3]

Открой мою страничку.


 
Neket   (2009-02-28 16:07) [4]

А там где?


 
Palladin ©   (2009-02-28 16:08) [5]

да вроде она у меня не так уж и пресыщена информацией.... :)
внизу там... одна из первых записей


 
Neket   (2009-02-28 16:09) [6]

Ды дело в том что неочень хочется компанентами пользоваться... Хотца самому. Ну дай кусочек кода как это делатся ПЛЗ...


 
Neket   (2009-02-28 16:12) [7]

Пробую так, но что-то мне подсказывает что это кривова-то я делаю. Навернео Ошибка Компилятора о несоответсвии типов.

XLApp:= CreateOleObject("Excel.Application");
XL:=XLApp.Workbooks.Add();
XLApp.Workbooks[1].WorkSheets[1].Name:="CGR";
XLApp.Visible:=true;
XL.Range["A1","K2858"].Value:=form1.DataSource1.DataSet;


А как привильно?


 
Palladin ©   (2009-02-28 16:21) [8]

вот те раз... там такая шакарная вещь на основе которой построена целая система отчетности... )

ну дело хозяйское... на...

Var
f:Text;
s:String;
i:Integer;
h:TGUID;
x:Olevariant;
t:OleVariant;
Begin
CreateGUID(h);
AssignFile(f,"c:\"+GUIDToString(h)); Rewrite(f);
While Not ds.Eof Do
 Begin
  s:="";
  For i:=0 to ds.Fields.Count-1 Do
   s:=s+ds.Fields[i].AsString+#9;
  SetLength(s,Length(s)-1);
  WriteLn(f,s);
 End;
CloseFile(f);
x:=CreateOleObject("Excel.Application");
x.Visible:=True;
x.Workbooks.Add;
t:=x.ActiveSheet.QueryTables.Add(Connection:="TEXT;"c:\"+GUIDToString(h), Destination:=Range("A1"));
t.Name:=GUIDToString(h);
t.AdjustColumnWidth:=True;
t.TextFileParseType:=1;
t.TextFileTextQualifier:=1;
t.TextFileTabDelimiter:=True;
t.TextFileSemicolonDelimiter:=False;
t.TextFileCommaDelimiter:=False;
t.TextFileSpaceDelimiter:=False;
t.Refresh;
End;


 
Neket   (2009-02-28 16:27) [9]

Вот Сдесь ключевая строчка
t:=x.ActiveSheet.QueryTables.Add(Connection:="TEXT;"c:\"+GUIDToString(h),
Destination:=Range("A1"));


А как сюда подвязать DataSource1?


 
Neket   (2009-02-28 16:27) [10]

Вот Сдесь ключевая строчка
t:=x.ActiveSheet.QueryTables.Add(Connection:="TEXT;"c:\"+GUIDToString(h),
Destination:=Range("A1"));


А как сюда подвязать DataSource1?


 
Anatoly Podgoretsky ©   (2009-02-28 18:09) [11]

В DataSource нет данных.


 
Palladin ©   (2009-02-28 18:22) [12]

мдя... ) товарисч даже не соизволил разобраться, что происходит...


 
Neket   (2009-02-28 18:23) [13]

А где они есть? В ДатаСет?


 
Amoeba ©   (2009-02-28 18:48) [14]

Автору вопроса изучить эти статьи:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=249
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=272
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=313


 
Neket   (2009-03-01 12:09) [15]

Amoeba ©   (28.02.09 18:48) [14]  Спасибо уже давно иучено. Но я объясню в связи с чем возник вопрос.
В Visualbasik есть примерный аналог компоненты Datasourse который называется ReckordSet. и работает он примерно так

 Dim cnnConnect    As ADODB.Connection
  Dim rstData       As ADODB.Recordset
  Dim qtbData       As Excel.QueryTable
  Dim wksNew        As Excel.Worksheet

  On Error GoTo CreateQueryTable_Err

  " Open connection on data source.
  Set cnnConnect = New ADODB.Connection
  cnnConnect.Provider = "SQLOLEDB"
  cnnConnect.Open strConnect

  " Open Recordset object on connection.
  Set rstData = New ADODB.Recordset
  rstData.Open strSQL, cnnConnect, adOpenForwardOnly

  " Add new worksheet.
  Set wksNew = ThisWorkbook.Worksheets.Add

  " Create query table in new worksheet.
  Set qtbData = _
     wksNew.QueryTables.Add(rstData, wksNew.Range("A1"))
- т.е. вот сдесь идет передача данных хронящихся в Recordset в QueryTables.
Вот почему я думал что есть такой вот легкий способ передачи данных из Delphi в Excel.


 
sniknik ©   (2009-03-01 13:17) [16]

> т.е. вот сдесь идет передача данных хронящихся в Recordset в QueryTables.
все с ног на голову...

наоборот в екселе есть подобная работа с ADO-шным рекордсетом (видимо VB это внутри и вызывает), т.к. оба творения мелкософта т.что связку они наладили.
но есть большая проблема, это работает исключительно для ADO, про использование которого ни слова в вопросе/обсуждении (не считая случайного примера из VB, что не делает фактом его использование тобой...).


 
Neket   (2009-03-01 13:21) [17]

Ок как вариант готов рассмотреть вариант использования ADO. Как? Где можно почитать?


 
Neket   (2009-03-01 14:27) [18]

Ок тогда перефразирую вопрос.
Есть некий созданный Excel-евский документ созданый так:
XLApp:= CreateOleObject("Excel.Application");
XL:=XLApp.Workbooks.Add();
XLApp.Workbooks[1].WorkSheets[1].Name:="CGR";
XLApp.Visible:=true;


И есть некий двумерный динамический Строковый (Непринципиально) массив заполненный примерно так:


var
MasCGR: array of array of string;
......
colcount:=10;
rowcount:=10;
SetLength(MassCGR,rowcount,colcount);
For i:=0 to rowcount do
For k:=0 to colcount do
MassCGR[i,k]:=IntToStr(Random(100));


Как данные из этого массива перенести быстро вы Excel?
потому как
For i:=0 to rowcount do
For k:=0 to colcount do
xL.Sheets["CGR"].Cells.Item[i+1, k+1].Value :=MassCGR[i,k];


Так делать нильзя и это очень долго.


 
Neket   (2009-03-01 14:28) [19]

Парни помогите ПЛЗ второй день выходной на работе сижу с этой проблемой. выручайте ПЛЗ а то блинов уже хотца поесть ;-)


 
Neket   (2009-03-01 14:43) [20]

Добавлю... если я делаю как пишут в И-нете в различных статьях
Xl.ActiveSheet.Range["A1",Xl.ActiveSheet.Cells.Item[Rowcount,Colcount]].Va lue:=MassCGR;

То при компиляции вылетает ошибка :
type not allowed in Variant Dispatch call


 
sniknik ©   (2009-03-01 15:06) [21]

> Ок как вариант готов рассмотреть вариант использования ADO.
что значит как вариант? ты либо его используешь и пользуешься  его возможностями, либо нет.

> И есть некий двумерный динамический Строковый (Непринципиально) массив заполненный примерно так:
как раз принципиально... работа с вариантным массивом должна быть в приведенных ссылках... а подпихивать неизвестно что (екселю) и ожидать, что будет работать глупо.

> То при компиляции вылетает ошибка :
> type not allowed in Variant Dispatch call
вот вот, оно самое.


 
Neket   (2009-03-01 15:10) [22]

Ок дело в том что я уже пробовал тип Variant вот так
var
MasCGR: array of array of Variant;


Таже самая ошибка...
И OLEVariant пробовал тоже самое.


 
sniknik ©   (2009-03-01 15:15) [23]

> Ок дело в том что я уже пробовал тип Variant вот так
а чего пишут в статьях? чего оно ожидает на самом деле? а не то, что ты пробовал.


 
Neket   (2009-03-01 15:34) [24]

Ура сделал!!!!!!... Специально приведу пример потому как вдруг кому-нибудь ещё понадобиться:

var
MasCGR:variant;
XLApp,XL:Variant;
......
colcount:=10;
rowcount:=10;
MassCGR:=VarArrayCreate([0,Rowcount,0,colcount],varVariant);
For i:=0 to rowcount do
For k:=0 to colcount do
MassCGR[i,k]:=IntToStr(Random(100));
.....................................
CoInitialize(nil);
try
XLApp:= CreateOleObject("Excel.Application");
XL:=XLApp.Workbooks.Add();
XLApp.Workbooks[1].WorkSheets[1].Name:="CGR";
XLApp.Visible:=true;
Xl.ActiveSheet.Range["A1",Xl.ActiveSheet.Cells.Item[Rowcount,Colcount]].Value:=M assCGR;
finally
CoUninitialize;


 
Сергей М. ©   (2009-03-01 15:38) [25]


> Neket


var MyArr: OleVariant;
..

MyArr := VarArrayCreate(..., varVariant);
..



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

Форум: "Начинающим";
Текущий архив: 2009.04.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.042 c
2-1235862485
Andrey K
2009-03-01 02:08
2009.04.19
Как добраться к свойствам компонентов.


15-1234855526
Andy BitOff
2009-02-17 10:25
2009.04.19
Покритикуйте =)


3-1219391994
Меруерт
2008-08-22 11:59
2009.04.19
Телефонный справочник


15-1235221405
Статистика
2009-02-21 16:03
2009.04.19
График популярности браузеров


15-1234964100
@!!ex
2009-02-18 16:35
2009.04.19
ICQ опять уронили?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский