全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2799
推到 Plurk!
推到 Facebook!

如何將delphi的DBGrid內的資料轉存成Excel檔呢?

缺席
tea15
初階會員


發表:64
回覆:72
積分:27
註冊:2005-06-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-05 10:08:26 IP:211.20.xxx.xxx 未訂閱
你們好,我想請問一下… 如何將delphi的DBGrid內的資料轉存成Excel檔呢?
wyndog
資深會員


發表:7
回覆:362
積分:348
註冊:2004-10-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-05 10:51:08 IP:60.248.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/topic.php?topic_id=34668 正好有相同的討論串....
tea15
初階會員


發表:64
回覆:72
積分:27
註冊:2005-06-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-05 13:32:19 IP:211.20.xxx.xxx 未訂閱
reptile大大… 謝謝你提供這個資料訊息… 但裡頭的問題還是沒有解決耶~~
supman
尊榮會員


發表:29
回覆:770
積分:924
註冊:2002-04-22

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-07-05 13:59:41 IP:61.70.xxx.xxx 未訂閱
那一篇沒有解決問題是因為發問的人本身不願意花話時間去測試跟找資料. 以下是我自己在用的將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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-07-05 14:01:05 IP:211.20.xxx.xxx 未訂閱
呵呵~~不過我在裡頭找到答案了~謝謝你!!
系統時間:2024-06-27 0:07:50
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!