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

用程式動態變更欄位公式

答題得分者是:sryang
henrybwu
一般會員


發表:1
回覆:4
積分:1
註冊:2010-10-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-10-19 18:27:28 IP:59.125.xxx.xxx 訂閱
各位先進...
前幾天公司派下一個任務
需求是用程式進行批次修改現有報表中日期格式

簡單說明如下:
程式環境: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
尊榮會員


發表:38
回覆:741
積分:875
註冊:2002-06-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-10-20 09:16:44 IP:111.254.xxx.xxx 訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-10-20 15:55:12 IP:59.125.xxx.xxx 訂閱
感謝您的回答,和另一名同事討論的結果決定改用方程式欄位的方式來做,目前還沒有完全完成,待程式完成後再上來跟大家分享
henrybwu
一般會員


發表:1
回覆:4
積分:1
註冊:2010-10-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-10-21 12:44:10 IP:59.125.xxx.xxx 訂閱
程式碼已完成,請先進不吝指教
[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, 註解 無‧
系統時間:2017-10-19 15:19:39
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!