请问如何把dbgrid中的内容生成excel文件? |
缺席
|
jtp
初階會員 發表:39 回覆:81 積分:29 註冊:2003-04-20 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹒ 資料庫中的資料外轉為Excel格式的檔案﹐利用DBGrid元件來轉﹐小弟還不會﹐也不知道是不是有這個功能﹐一般來講﹐都是利用資料集元件來進行外轉﹒比如說利用ADOQuery元件來做此動作﹐可下SQL如下﹕ ADOQuery1.SQL.Text := 'Select * Into [訂單]'
'In "D:\訂單.xls" "Excel 8.0;" From 訂單';
//紅色處為檔案生成后在Excel中的Sheet名稱﹐也可以說是對應一個資料表﹒
//'D:\訂單.xls'代表路徑和檔案名稱﹒
//'Excel 8.0'為檔案格式
ADOQuery1.ExecSQL;
//執行生成Excel檔案﹒ 試試看吧﹗ 努力,相信會獲得美麗!
忻晟 發表人 - cashxin2002 於 2003/07/26 10:59:44 發表人 - cashxin2002 於 2003/07/28 10:28:40
------
忻晟 |
jtp
初階會員 發表:39 回覆:81 積分:29 註冊:2003-04-20 發送簡訊給我 |
我这有一段代码,忘记是哪位前辈写的了,但运行出错,提示如下:
Access violation at address 004D82C6 in module "main.exe" .Read of address 00000058.请问何故? 代码如下:
procedure DBGrid9Excel(DBGrid:TDBGrid;ExcelFileName:string);
var
MyExcel:Variant;
x,y:integer;
begin
deletefile(ExcelFileName);
MyExcel := CreateOleOBject('Excel.Application'); MyExcel.WorkBooks.Add;
MyExcel.Visible := True;
MyExcel.WorkBooks[1].Saveas(ExcelFileName);
dbgrid.DataSource.DataSet.First; y:=1;
for x:=1 to dbgrid.FieldCount do
begin
MyExcel.WorkBooks[1].WorkSheets[1].Cells[y,x]:=dbgrid.Fields[x-1].DisplayName; MyExcel.WorkBooks[1].WorkSheets[1].Cells[y,x].Select; MyExcel.Selection.Font.Bold:=true; MyExcel.WorkBooks[1].WorkSheets[1].Columns[x].ColumnWidth := dbgrid.Fields[x-1].DisplayWidth;
end;
inc(y);
while not dbgrid.DataSource.DataSet.eof do
begin
for x:=1 to dbgrid.FieldCount do
begin
MyExcel.WorkBooks[1].WorkSheets[1].Cells[y,x] := dbgrid.Fields[x-1].AsString;
end;
inc(y);
dbgrid.DataSource.DataSet.next;
end;
end;
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
jtp
初階會員 發表:39 回覆:81 積分:29 註冊:2003-04-20 發送簡訊給我 |
|
jtp
初階會員 發表:39 回覆:81 積分:29 註冊:2003-04-20 發送簡訊給我 |
|
Rain
資深會員 發表:31 回覆:236 積分:268 註冊:2003-02-17 發送簡訊給我 |
DBGrid導Excel的代碼找一下應該很多,這邊也有一個:TDBGridExport
http://www.delphibbs.com/delphibbs/dispq.asp?lid=737517
還有一個選擇就是使用第三方元件dxDBGrid(cxDBGrid),就是大名鼎鼎的
QuantumGrid,裏邊已經實現好了導出至Excel的功能(dxDBGrid中有這個過程可調用,cxDBGrid把它單獨在一個單元),不管是標題,欄位加總,都可以的,導Excel估計沒有比它裏邊實現更完全的代碼了。
|
margaret07
一般會員 發表:14 回覆:12 積分:5 註冊:2004-10-10 發送簡訊給我 |
你看看这样就可以:
with SaveDialog1 do
begin
FileName:=formatdatetime('yyyymmddhhnn',now);
if Execute then
begin
if Pos('.xls',FileName)<=0 then
FileName:=FileName '.xls';
if FileExists(FileName) then
begin
if MessageDlg('文件已经存在,是否覆盖?',
mtConfirmation, [mbYes, mbNo], 0) <> mrYes then
exit;
end;
dxDBGrid1.SaveToXLS(SaveDialog1.FileName,true); //导出EXCEL 表
end;
end;
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |