輸出成 excel 的問題 |
答題得分者是:st33chen
|
pnshxix
一般會員 發表:21 回覆:9 積分:6 註冊:2007-06-26 發送簡訊給我 |
|
st33chen
尊榮會員 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
[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的方式!或許可以參考一下 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |