Форум: "Начинающим";
Текущий архив: 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
- т.е. вот сдесь идет передача данных хронящихся в Recordset в QueryTables.
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"))
Вот почему я думал что есть такой вот легкий способ передачи данных из 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.048 c