用程式動態變更欄位公式 |
答題得分者是:sryang
|
henrybwu
一般會員 發表:1 回覆:4 積分:1 註冊:2010-10-15 發送簡訊給我 |
各位先進...
前幾天公司派下一個任務 需求是用程式進行批次修改現有報表中日期格式 簡單說明如下: 程式環境:DELPHI 5 報表環境:CRYSTAL REPORT 8.5 修改原因:因應民國100年時日期格式無法正確顯示的問題 目前新建的報表都可以利用 [欄位]=>[欄位格式]=>[自訂] 在其中{年前分隔符號] 的部份加入一個公式進行計算, 公式大略如下: if years({fieldName}) > 2010 then CStr(Truncate(((Years({fieldName}) - 1911)/100)) 問題是.....以往的舊報表數量太多,實在不可能逐一人工進行欄位中公式的新增, 不知道是否有方法可以用程式來寫入這個公式? 目前試的結果是....我可以用 fieldObj.Get_DateCalendarType=crTaiwaneseCalendar 來判斷這個欄位是否是日期而且要以民國年的格式顯示 也可以用 fieldObj.DatePrefixSeparator := 'xxx' 來把特定字串寫到 "年前分隔符號"這個欄位進行顯示, 可是就是找不到方法可以寫入公式,不知道是否真的無解? |
sryang
尊榮會員 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
Crystal Report 8, 8.5, 9 的 CRAXDRT.DLL 都不支援這個功能
而 Crystal Report 11 的 CRAXDRT.DLL有支援 IFieldObject.ConditionFormula[FormulaType] 請樓主的公司考慮升級,或是把報表發下去讓大家動手改 或是改用 FormulaField,公式請參考 http://maolaoda.blogspot.com/2009/03/crystal-report-100.html
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/ |
henrybwu
一般會員 發表:1 回覆:4 積分:1 註冊:2010-10-15 發送簡訊給我 |
|
henrybwu
一般會員 發表:1 回覆:4 積分:1 註冊:2010-10-15 發送簡訊給我 |
程式碼已完成,請先進不吝指教
[code delphi] CrRpt.FormulaFields.Add(FormulaName,FiF); //增加一個方程式欄位 CrRpt.Sections[i].AddFieldObject(CrRpt.FormulaFields.GetItemByName(FormulaName), vFLeft,vFTop); //增加一個列印欄位 vj := vj 1; for k := j to vj do begin CrRpt.Sections[i].ReportObjects[k].QueryInterface(IFieldObject, vFObj); if vFObj <> nil then begin if DatabaseFieldDefinition(vFObj.Field).Name = vFFName then begin //根據方程式欄位的名稱來找出我們新建的文字方塊 vFObj.Font := fieldObj.Font; //把字型設定成跟原本的方塊相同 vFObj.Height := vFHeight; //字型變更之後高度也要隨著變更,否則文字會被切掉一部份 vFObj.Width := vFWidth; //設定新欄位的寬度....避免太寬造成排版上的錯誤 end; end; end; [/code]
編輯記錄
henrybwu 重新編輯於 2010-10-20 22:50:06, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |