請高手入內(有關報表數據集TQuery中的數據輸出到Excel的問題)(200分)

  • 主题发起人 主题发起人 hotboys
  • 开始时间 开始时间
H

hotboys

Unregistered / Unconfirmed
GUEST, unregistred user!
讓我看看DFW是否真的有高手,能夠完美的解答出我的問題。因為我翻看了許多以前的問題,都是些不夠分量的貼子。
注意,是Query,不是從DBGrid;是從報表,不是從Form.
 
對了,忘了說了,我用的報表控件是QuickReport。怎麼沒人來看呀,不會也幫我頂一下。有請版主出馬。。
 
var
i,row:integer;
begin
if SaveDialog1.Execute then
begin
Screen.Cursor:=crHourGlass;
ExcelApplication1.Connect;
ExcelApplication1.Workbooks.Add(Null,0);
ExcelWorkBook1.ConnectTo(ExcelApplication1.Workbooks[1]);
ExcelWorkSheet1.ConnectTo(ExcelWorkBook1.Sheets[1] as _WorkSheet);
for i:=0 to adoQuery1.Fields.Count-1do
ExcelWOrkSheet1.Cells.Item[1,i+1]:=adoQuery1.Fields.FieldName;
row:=2;
while not adoQuery1.Eofdo
begin
for i:=0 to adoQuery1.Fields.Count-1do
begin
ExcelWOrkSheet1.Cells.Item[row,i+1]:=adoQuery1.Fields.AsString;
end;
row:=row+1;
adoQuery1.Next;
end;
ExcelWorkBook1.SaveCopyAs(SaveDialog1.FileName);
ExcelWOrkBook1.Close(false);
ExcelApplication1.Disconnect;
ExcelApplication1.Quit;
Screen.Cursor:=crDefault;
Application.MessageBox('Export successfully!','Information',0);
end;
 
同意楼上说的,不论是TTable还是TQuery, 把它们的数据输入到Excel中的原理都一样,
都是创建成功OLE自动化实例后(当然用delphi提供的组件也行,比如楼上的), 遍列所有的记录,依次把每条记录加到Excel表单中。
 
如果是ADOquery的话
sql server导出到excel
ADOConnection 指向excel, 用Jet4.0 ,Extended properties设为Excel 8.0
SELECT * into table FROM Tab1 IN [ODBC]
[ODBC;Driver=SQL Server;UID=sa;PWD=;Server=127.0.0.1;DataBase=Demo;]
 
如果是ADOquery的话
sql server导出到excel
ADOConnection 指向excel, 用Jet4.0 ,Extended properties设为Excel 8.0
SELECT * into table FROM Tab1 IN [ODBC]
[ODBC;Driver=SQL Server;UID=sa;PWD=;Server=127.0.0.1;DataBase=Demo;]
 
QREPD5增强过滤.EXE控件可以导报表到excel, 但表格不是很漂亮
或用fr直接导到excel
 
感謝以上人員的參與,我用的不是ADO,是BDE,是用TQuery,並且,我想將導出的功能放在父報表窗體,而父報表窗體的Query中的數據集是空的。數據集要在子報表中建立,能不能實現導出?
 
請幫我頂一下呀。
 
我來幫你!
procedure Tform.BitBtn1Click(Sender: TObject);
begin
if SaveDialog1.Execute then
begin
ExcelApplication1.Connect;
ExcelApplication1.Workbooks.Add(null, 0);
ExcelWorkBook1.ConnectTo(ExcelApplication1.Workbooks[1]);
ExcelWorkSheet1.ConnectTo(ExcelWorkBook1.Sheets[1] as _WorkSheet);
ExcelWOrkSheet1.Cells.Item[1, 1] := '字段一';
ExcelWOrkSheet1.Cells.Item[1, 2] := '字段二';
ExcelWOrkSheet1.Cells.Item[1, 3] := '字段三';
row := 2;
while not query1.Eofdo
begin
for i := 0 to query1.Fields.Count - 1do
begin
ExcelWOrkSheet1.cells.item[row,i+1].NumberFormatLocal:='@';
ExcelWOrkSheet1.Cells.Item[row, i + 1] := query1.Fields.AsString;
end;
row := row + 1;
query1.Next;
end;
ExcelWorkBook1.SaveCopyAs(SaveDialog1.FileName);
ExcelWOrkBook1.Close(false);
ExcelApplication1.Disconnect;
ExcelApplication1.Quit;
Screen.Cursor := crDefault;
Application.MessageBox('EXCEL轉換完畢!', '提示', 0);
end;
end;
 
TO:hotboys
這個轉excel問題我幫你解決! 好簡單! 你還有一個報表放大的問題沒有答我呢!請把可執行的EMAIL給我!
 
TO:weifang
你這是從哪抄來的呀。像這樣的代碼我多的是,沒用。至於你要可執行程式,好,等下給你。
 
楼上的代码是一种解决方法,通过ole来保存成excel稍微该下,应该可以适合你的要求的
 
不行,試了N+1遍了。
 
哈哈哈,還是我自己解決了,我真是太聰明了,導出大量數據僅需幾秒而已,並且可以繼承到子窗體。哈哈。。。。。。
 
我是用创建一个excel对象的方法导出的
不知道楼主是用的什么方法,可否说说?
 
这种问题也叫有份量??????????
 
后退
顶部