如何才能把dbgrid中的資料匯出到EXCEL中 |
尚未結案
|
suntao008
一般會員 發表:70 回覆:38 積分:21 註冊:2003-10-19 發送簡訊給我 |
|
terrychen
尊榮會員 發表:90 回覆:794 積分:501 註冊:2003-05-01 發送簡訊給我 |
|
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
|
suntao008
一般會員 發表:70 回覆:38 積分:21 註冊:2003-10-19 發送簡訊給我 |
|
terrychen
尊榮會員 發表:90 回覆:794 積分:501 註冊:2003-05-01 發送簡訊給我 |
|
suntao008
一般會員 發表:70 回覆:38 積分:21 註冊:2003-10-19 發送簡訊給我 |
|
TATSU
版主 發表:50 回覆:135 積分:62 註冊:2003-01-16 發送簡訊給我 |
|
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
引言: 感謝兩位的指導: 不知兩位有沒有看過應用程序,如何看過就會發現: 我些我的程序中的按他們的方法運行,結果出現錯誤,可語句的錯誤,請各位大大,能否告訴我,如何去實現轉成Excel檔,謝謝!問題最好明確一點,這樣大夥比較容易切入您的問題核心! 1.比如您的程式從哪裡下載的,網址連結? 2.採用的Delphi版本 D5 / D6 / D7 ? 3.出現的錯誤訊息畫面為何 ? 4.您的作業系統為何 ? 這樣可以讓回覆更有效率! ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~ |
Wesly
中階會員 發表:14 回覆:103 積分:53 註冊:2002-05-31 發送簡訊給我 |
function TForm1.SaveToExcel(vFileName: string): Boolean;
//存成Excel檔
var
index, i, j: Integer;
BookMark: TBookmarkStr;
Excel, workbook, worksheet: variant;
begin
result := False; DBGrid1.DataSource.DataSet.DisableControls;
try
Excel := CreateOleObject('Excel.Application');
if Application.MessageBox('是否進入 Excel 編修模式?',
'程式執行確認', MB_YesNo MB_DEFBUTTON1
MB_IconQuestion MB_ApplModal) = IDYES then
Excel.Application.Visible := True
else
Excel.Application.Visible := False;
workbook := Excel.WorkBooks.Add;
worksheet := Excel.WorkSheets['sheet1'];
try
index := 1;
j := 1;
//寫入製表日期時間
worksheet.Cells[index, j] := '產生日期時間:';
Inc(j);
Excel.WorkSheets[1].Columns[j].NumberFormatLocal := '@';
worksheet.Cells[index, j] := FormatDateTime('yyyy/mm/dd hh:mm', now);
Inc(index);
//記錄位置
Bookmark := DBGrid1.DataSource.DataSet.Bookmark;
DBGrid1.DataSource.DataSet.First;
j := 1;
//標題
for i := 0 to DBGrid1.Columns.Count - 1 do
if not DBGrid1.Columns[i].Field.IsBlob and //not Blob Type
(DBGrid1.Columns[i].Visible) then //Is Visible
begin
worksheet.Cells[index, j] := DBGrid1.Columns[i].Title.Caption;
//worksheet.Cells[index, j].Alignment := 'Center';
//worksheet.Cells[index, j].Range(IntToStr(index) GetX(j)).HorizontalAlignment := 'xlCenter';
//定義欄位為字串時, 靠左對齊
case DBGrid1.Columns[i].Field.DataType of
ftString: Excel.WorkSheets[1].Columns[j].NumberFormatLocal := '@';
end;
Inc(j);
end;
Inc(index);
//內容
while not DBGrid1.DataSource.DataSet.Eof do
begin
j := 1;
for i := 0 to DBGrid1.Columns.Count - 1 do
if not DBGrid1.Columns[i].Field.IsBlob and //not Blob Type
(DBGrid1.Columns[i].Visible) then //Is Visible
begin
worksheet.Cells[index, j] := DBGrid1.Columns[i].Field.DisplayText;
inc(j);
end;
Inc(index);
DBGrid1.DataSource.DataSet.next;
end;
//最適欄寬
j := 1;
for i := 0 to DBGrid1.Columns.Count - 1 do
begin
if not DBGrid1.Columns[i].Field.IsBlob and //not Blob Type
(DBGrid1.Columns[i].Visible) then //Is Visible
begin
//定義最適欄寬
Excel.WorkSheets[1].Columns[j].AutoFit;
Excel.WorkSheets[1].Columns[j].ColumnWidth :=
Excel.WorkSheets[1].Columns[j].ColumnWidth 1;
inc(j);
end;
end;
//
worksheet.SaveAs(vFileName '.xls');
beep;
ShowMessage('已產生 "' vFileName '.xls' '" 檔案 "');
result := True;
finally
if not Excel.Application.Visible then
begin
Excel.WorkBooks.Close;
Excel.Quit;
end;
DBGrid1.DataSource.DataSet.Bookmark := Bookmark;
DBGrid1.DataSource.DataSet.EnableControls;
end;
except
ShowMessage('無法啟動Excel!!');
end;
end;
以上程式有幾個問題:
一。是執行該程式的那電腦必須要有Excel,否則會沒有做用。
二。是資料量多的時候,會比較慢。
三。在Delphi 5.0(含)以上才有做用。
希望對你有些幫助。
對了在必須把ComObj,Uses 進去才能使用喔。
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |