線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:4032
推到 Plurk!
推到 Facebook!

輸出成 excel 的問題

答題得分者是:st33chen
pnshxix
一般會員


發表:21
回覆:9
積分:6
註冊:2007-06-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-01-24 11:27:45 IP:140.128.xxx.xxx 訂閱
我讀入 一個 資料庫後

將 資料庫內容處理完

請問一下

我要如何將這些資料

做成一個報表 並輸出 成 excel 檔
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-01-24 14:53:03 IP:122.116.xxx.xxx 訂閱
1. 報表和存檔一起做
用 qreport 元件做報表, 並在 qreport 的 form 中拉一個 csv filter.
執行印表時就可以存成可用 excel 開啓的 csv 檔.
若一定要用 xls 檔, 可找 qreport 3rd party filters (如 psqrfilters )
不過, 我用的結果, 大部份 filters 轉出的 xls 檔都有局部排版亂掉的情形,
所以我後來都存 csv 檔再轉存 xls 檔.

2. 報表和存檔分開做
報表還是用 qreport 元件(或其他公司出的報表元件) 比較快.
存 xls 檔部份, 則可以
a. 用 xls 元件 (如 免費的 mxnativeexcel)
b. COM object (例 http://www.jcwcn.com/html/Delphi/16_46_41_998.htm )
c. 用 ADO 把 EXCEL 當成 table 來處理 ( http://delphi.about.com/library/code/ncaa090903a.htm )
d. 自己做, 存 csv 檔:
while not query1.eof do begin
mylist.add(query1.fieldbyname('fld1').asstring ',' query1.fieldbyname('fld2').asstring ......);
query1.next;
end;
mylist.savetofile(csvfilename);
然後用 excel 打開 csv 檔, 可再轉存 xls 檔.
我後來大部份都用這個方法, 好控制, 好 dedug;

------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
yubad2000
中階會員


發表:0
回覆:44
積分:78
註冊:2007-09-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-01-25 02:20:05 IP:66.171.xxx.xxx 未訂閱
If you are using Delphi 7, under servers tag, you can find the components of MS word and execl.
So, do some research or read the help of them, you will find that how can you transfer or copy data into a execl file.
Or, you can even draw a chat.

===================引 用 pnshxix 文 章===================
我讀入 一個 資料庫後

將 資料庫內容處理完

請問一下

我要如何將這些資料

做成一個報表 並輸出 成 excel 檔
------
===波士頓夜未眠===
What a wonderful world!!
Jazz up the world with jazz!!
==================

When I am not programming...
you can find me here:
http://www.holy-war.de/EN/World3/bin/?advertiser=63190
hsin6514
一般會員


發表:6
回覆:8
積分:2
註冊:2003-06-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-02-26 12:25:52 IP:60.248.xxx.xxx 訂閱

[code delphi]
var
MsExcel,MsExcelSheet,a:Variant;
i,j,K:integer;
PopPanel,PopTitle:TPanel;
PopButton,PopExitButton:TButton;
PopLabel:TLabel;
PopProgressBar:TProgressBar;
rtScreen,rtButton2: TRect;
begin
PopPanel:=TPanel.Create(self);
PopPanel.Width:=500;
PopPanel.Height:=80;
PopPanel.Top:=230;
PopPanel.Left:=120;
PopPanel.Font.Size:=12;
PopPanel.Alignment:=taCenter;
PopPanel.BorderStyle:=bsSingle;
PopPanel.Parent:=self;
PopProgressBar:=TProgressBar.Create(self);
PopProgressBar.Parent:=PopPanel;
PopProgressBar.Width:=470;
PopProgressBar.Height:=24;
PopProgressBar.Left:=10;
PopProgressBar.Top:=16;
PopLabel:=TLabel.Create(self);
PopLabel.Parent:=PopPanel;
PopLabel.Width:=460;
PopLabel.Height:=24;
PopLabel.Left:=12;
PopLabel.Top:=44;
PopLabel.Caption:='Process %';
PopPanel.Update;
rtButton2:=PopPanel.BoundsRect;
MapWindowPoints(handle, 0, rtButton2, 2);// 座標換算
ClipCursor(@rtButton2);
PopProgressBar.Position:=0;
PopLabel.Caption:='載入 MicroSoft Excel 作業中 ....';
PopPanel.Update;
try
MsExcel:=CreateOleObject('Excel.Application');
MsExcel.WorkBooks.Add;
MsExcel.WorkBooks[1].WorkSheets[1].Name:=PageControl.ActivePage.Caption;
except
MsExcel.Quit;
MessageDlg('無法啟動 MicroSoft Excel !',mtWarning,[mbOK],0);
exit;
end;
MsExcelSheet:=MsExcel.WorkBooks[1].WorkSheets[PageControl.ActivePage.Caption];
MsExcelSheet.cells[1,2]:='製表日期:' FormatDateTime('yyyy/mm/dd',Now);
MsExcelSheet.cells[1,2].Font.Size := 10;
MsExcelSheet.cells[1,2].HorizontalAlignment := xlcenter;
MsExcelSheet.cells[1,7].Font.Size := 20;
MsExcelSheet.cells[1,7].HorizontalAlignment := xlcenter;
i:=1;
MsExcelSheet.cells[1,5]:=AccRadioGroup.Items[AccRadioGroup.ItemIndex];
MsExcelSheet.cells[1,5].Font.Size := 12;
for j:=0 to Master.FieldCount-1 do
begin
a:=Master.Fields[j].FieldName;
MsExcelSheet.cells[i 1,j 2]:=a;
// MsExcelSheet.cells[i 1,j 2].Font.Size := 9;
MsExcelSheet.cells[i 1,j 2].HorizontalAlignment := xlcenter;
end;
Master.First;
for i:=1 to Master.RecordCount do
begin
a:=i;
MsExcelSheet.cells[i 2,1]:=a;
MsExcelSheet.cells[i 2,1].HorizontalAlignment := xlLeft;
for j:=0 to Master.FieldCount-1 do
begin
if Master.Fields[j].Value=null
then a:=''
else a:=Master.Fields[j].Value;
MsExcelSheet.cells[i 2,j 2]:=a;
if (j=0) then MsExcelSheet.cells[i 2,j 2].NumberFormatLocal := '0'
else if (j=1) then MsExcelSheet.cells[i 2,j 2].NumberFormatLocal := '000';
MsExcelSheet.cells[i 2,j 2].HorizontalAlignment := xlLeft;
end;
PopProgressBar.Position:=Round((Master.RecNo/Master.RecordCount)*100);
PopLabel.Caption:='Total Record now running in : ' IntToStr(Master.RecNo) '/' IntToStr(Master.RecordCount) ' Please Waitting ....';
PopPanel.Update;
Master.Next;

rtScreen:=Rect(0,0,Screen.Width,Screen.Height);// 座標換算
ClipCursor(@rtScreen);// 限制鼠標移動區域
ShowMessage('資料匯出作業完成 !!');
PopPanel.Free;
MsExcel.Visible:=True;
[/code]

這是我拋EXCEL的方式!或許可以參考一下
系統時間:2024-03-28 18:08:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!