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

求救 請問高手們 Delphi 如何讓 excel 完成小計功能?

尚未結案
phliao
一般會員


發表:8
回覆:8
積分:3
註冊:2003-08-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-04 20:13:25 IP:210.202.xxx.xxx 未訂閱
小弟我遇到了二個問題: 我動態產生的excel,資料也從Table轉入了, 我想設定小計功能,所以我錄下了巨集, Rows("5:72").Select Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(12, 13, 14 , 15, 16, 17, 18, 19, 20, 21, 22, 23), Replace:=True, PageBreaks:=False, SummaryBelowData:=True 問題1. 不知道Array(12, 13, 14 , 15, 16, 17, 18, 19, 20, 21, 22, 23)這個要怎麼轉碼 隨便給個值 FWorkSheet.RANGE['A4'].Subtotal(1, xlSum, 'Array(12, 13, 14 , 15, 16, 17, 18, 19, 20, 21, 22, 23)', True, False, True); 我有去看excel2000.pas,需要六個參數 執行後,出現 "無法取得Range類別的Subtotal屬性" 問題2. 為什麼會呼叫不到呢?錯誤訊息應該是出現 'Class Range 的 Subtotal方法失敗' 才對,不知有沒有誰知道如何解決呢?
phliao
一般會員


發表:8
回覆:8
積分:3
註冊:2003-08-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-04 20:38:20 IP:210.202.xxx.xxx 未訂閱
忘了附上在excel2000.pas查到的 小計函數宣告(Subtotal) procedure Subtotal(GroupBy: Integer; Function_: XlConsolidationFunction; TotalList: OleVariant; Replace: OleVariant; PageBreaks: OleVariant; SummaryBelowData: XlSummaryRow); dispid 882;
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-04 21:18:44 IP:61.71.xxx.xxx 未訂閱
引言: 忘了附上在excel2000.pas查到的 小計函數宣告(Subtotal) procedure Subtotal(GroupBy: Integer; Function_: XlConsolidationFunction; TotalList: OleVariant; Replace: OleVariant; PageBreaks: OleVariant; SummaryBelowData: XlSummaryRow); dispid 882;
有很多的Excel錄下來的巨集在Delphi中未必可用, 不妨嘗試在小計的cell上填入sum()的統計函數 for i:= 1 to ..... cellrange:= '=SUM(' getCell(c) InttoStr(row) '..' getCell(c) InttoStr(row 11) ')'; Worksheet.Cells[row 12,c]:= cellrange; end; 例如這段語法, 是指定cellrange(string)= 'sum(B1..B12)' 而其中getCell(c)是我自定的函數, 你可能要自己來設定, 目的在於計算對應格 預設 B13是存放 SUM(B1..B12)公式(假設row=1), 而下一列 C13的公式應該是SUM(C1..C12) D13的公式應該是SUM(D1..D12) 依此類推, 就是在算 Worksheet.Cells[row 12,c]應該存放那一COLUMN(B or C or D)的值 寫了那麼多, 也不知道自己在講什麼, 真得很不好解說, 反正一個原則, 利用sum()的excel函數填入到要做小計的cell上, 而不只sum可以這樣做, 非常多的函數都可以利用這種方式來填入公式 給你一個方向, 其他靠自己囉!
phliao
一般會員


發表:8
回覆:8
積分:3
註冊:2003-08-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-04 21:44:36 IP:218.171.xxx.xxx 未訂閱
感謝P.D.大大 我了解您提供的方向,不過我的小計可能有好幾種以上,依user勾選小計欄位而產生,若用您提供的方式這在設計上就比較麻煩點,但是最重要的一點是我的user不願意使用那種呈現方式,他只要excel那個小計方式 =.=a Subtotal函數真的不能在 Delphi 用嗎? @@a
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-08-06 08:33:42 IP:210.65.xxx.xxx 未訂閱
Hi phliao,    試試這樣寫:
var
    SubtotalColumn :Olevariant;
begin
    ....
    SubtotalColumn := VarArrayCreate([1,12],VarVariant);
    SubtotalColumn := VarArrayOf([12,13,14,15,16,17,18,19,20,21,22,23]);
    ExcelApplication1.Cells.Subtotal(1,xlSum,SubtotalColumn,True,EmptyParam,xlSummaryBelow);
    ....
end;
---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
phliao
一般會員


發表:8
回覆:8
積分:3
註冊:2003-08-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-08-06 20:59:09 IP:218.171.xxx.xxx 未訂閱
呼呼呼 ok ok 了 終於在 Fishman 的幫助之下,成功的使用了小計的功能 真是大大的解決我一個棘手之忙,非常謝謝 Fishman ^^ 也感謝 P.D. 的回應
系統時間:2024-06-28 18:38:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!