如何將delphi的DBGrid內的資料轉存成Excel檔呢? |
缺席
|
tea15
初階會員 發表:64 回覆:72 積分:27 註冊:2005-06-15 發送簡訊給我 |
|
wyndog
資深會員 發表:7 回覆:362 積分:348 註冊:2004-10-12 發送簡訊給我 |
|
tea15
初階會員 發表:64 回覆:72 積分:27 註冊:2005-06-15 發送簡訊給我 |
|
supman
尊榮會員 發表:29 回覆:770 積分:924 註冊:2002-04-22 發送簡訊給我 |
那一篇沒有解決問題是因為發問的人本身不願意花話時間去測試跟找資料.
以下是我自己在用的將DBGrid轉至Excel的函數,如對程式有問題,請先使用"Excel"搜尋,有非常多的資料.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids, DBGrids, ComCtrls, ShellCtrls, FileCtrl, DB, ADODB; type TForm1 = class(TForm) Button1: TButton; DBGrid1: TDBGrid; ADOQuery1: TADOQuery; DataSource1: TDataSource; procedure Button1Click(Sender: TObject); private public end; var Form1: TForm1; implementation uses Comobj; {$R *.dfm} Function zDBGrid2Excel(var DBGrid:TDBGrid;Title:Array of String;Footer:Array of String;Rule:String;HasNo:Boolean):ShortInt; var i,j,TitleRow,FooterRow:integer; eclApp,WorkBook:Variant; xlsFileName:string; begin xlsFileName:='c:\ex.xls'; TitleRow:=Length(Title); FooterRow:=Length(Footer); try eclApp:=CreateOleObject('Excel.Application'); WorkBook:=CreateOleobject('Excel.Sheet'); except eclApp:=Unassigned; WorkBook:=Unassigned; Result:=-1; Exit; end; try eclapp.Visible:=true; workBook:=eclApp.workBooks.Add; for i:=0 to DBGrid.Columns.Count-1 do eclApp.Cells(1,i 1):=DBGrid.Columns[i].Title.Caption; if (Rule='Char') then begin for i:=1 to DBGrid.Columns.Count do begin eclApp.Columns[i].Select; eclApp.Selection.NumberFormatLocal:='@'; end; end; DBGrid.DataSource.DataSet.First(); for j:=1 to DBGrid.DataSource.DataSet.RecordCount do begin for i:=0 to DBGrid.FieldCount-1 do begin try//因為有些的資料欄,為空欄位(不存在),因此必須判斷如果是不存在的欄位則該資料藍為空值 eclApp.Cells(j 1,i 1):=DBGrid.Fields[i].AsString; except end; end; DBGrid.DataSource.DataSet.Next(); end; if (HasNo) then begin eclApp.Columns[1].Select;//選取一整行 eclApp.Selection.Insert;//插入一行 eclApp.Cells[1,1]:='編號'; for i:=1 to DBGrid.DataSource.DataSet.RecordCount do eclApp.Cells[i 1,1]:=IntToStr(i); end; for i:=1 to TitleRow do begin eclApp.Rows[i].Select;//選取一整行 eclApp.Selection.Insert;//插入一行 eclApp.Cells(i,1):=Title[i-1]; end; for i:=1 to FooterRow do eclApp.Cells(DBGrid.DataSource.DataSet.RecordCount i TitleRow 1,1):=Footer[i-1]; if (HasNo) then eclApp.Cells(TitleRow,DBGrid.Columns.Count 1):=DateToStr(Date) else eclApp.Cells(TitleRow,DBGrid.Columns.Count):=DateToStr(Date); except Result:=-2; WorkBook.close; eclApp.Quit; eclApp:=Unassigned; end; end; procedure TForm1.Button1Click(Sender: TObject); var Rslt:Integer; Excel,WorkBook:Variant; Title,Footer:Array[0..1] of String; begin Title[0]:='表頭:'; Footer[1]:='表尾:'; Rslt:=zDBGrid2Excel(DBGrid1,Title,Footer,'Normal',false); if (Rslt=-1) then Application.MessageBox('您的機器里未安裝Microsoft Excel。','說明',MB_OK); if (Rslt=-2) then Application.MessageBox('不能正確操作Excel文件。可能是該文件已被其他程序打開, 或系統錯誤。','說明',MB_OK); end; end.發表人 - supman 於 2005/07/05 14:05:30 |
tea15
初階會員 發表:64 回覆:72 積分:27 註冊:2005-06-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |