Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.04.19;
Скачать: CL | DM;

Вниз

Передача 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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.025 c
15-1234985753
turbouser
2009-02-18 22:35
2009.04.19
Вопрос в тему...


2-1235711956
nastya
2009-02-27 08:19
2009.04.19
Злополучная лямда


4-1208255815
vopros
2008-04-15 14:36
2009.04.19
Почему такой код в Висте не работает а в XP работает?


6-1202301817
dreamse
2008-02-06 15:43
2009.04.19
Вопрос про испорченую кодировку при скачивании файла по Http


15-1234596212
Palladin
2009-02-14 10:23
2009.04.19
Декларирование указателя в Си