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

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

Передача DataSource в Excel. [D7, XP]


Страницы:   1 2

Neket ©   (2009-02-28 16:01:00) 

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


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


> Neket


var MyArr: OleVariant;
..

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


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

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

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;


sniknik   (2009-03-01 15:15:00) [3]

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


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

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


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


sniknik   (2009-03-01 15:06:00) [5]

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

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

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


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

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

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


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

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


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

Ок тогда перефразирую вопрос.
Есть некий созданный 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 13:21:00) [9]

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


sniknik   (2009-03-01 13:17:00) [10]

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

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


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

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.


Amoeba   (2009-02-28 18:48:00) [12]

Автору вопроса изучить эти статьи:
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-02-28 18:23:00) [13]

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


Palladin   (2009-02-28 18:22:00) [14]

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


Anatoly Podgoretsky   (2009-02-28 18:09:00) [15]

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


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

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


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


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

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


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


Palladin   (2009-02-28 16:21:00) [18]

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

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

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:12:00) [19]

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

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;


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


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

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


Страницы:   1 2

Наверх

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