看其demo:CustomFunctionDemo。
在报表系统中,特别是财务等报表系统中。需要对固定格式的报表中cell定义取数公式。
如新中大中:
公式 |
返回值 |
gs_dwmc(预算单位代码/名称简写,账套,年度) | 预算单位名称 |
gs_mjkm(末级科目代码/名称简写,账套,年度) | 末级科目名称 |
如果我们使用dxSpreadSheet时,如何定义自己的函数公式,以取得数据库等相关数据记录和计算结果呢?
三大步:
1 | resourcestring sTriangleArea = 'TriangleArea'; implementation {$R *.dfm} uses dxSpreadSheetCoreFormulasTokens |
2 | procedure fpiTriangleArea(var AParamCount: Integer; var AParamKind: TdxSpreadSheetFunctionParamKindInfo); begin AParamCount := 3; SetLength(AParamKind, AParamCount); AParamKind[0] := fpkValue; AParamKind[1] := fpkValue; AParamKind[2] := fpkValue; end; |
3 | procedure fnTriangleArea(Sender: TdxSpreadSheetFormulaResult; const AParams: TdxSpreadSheetFormulaToken); var P1, P2, P3: Variant; begin if Sender.GetParamsCount(AParams) <> 3 then Sender.SetError(ecValue) else if Sender.ExtractNumericParameter(P1, AParams) then if Sender.ExtractNumericParameter(P2, AParams, 1) then if Sender.ExtractNumericParameter(P3, AParams, 2) then Sender.AddValue(0.5 * P1 * P2 * SIN(P3 * Pi / 180)); end; |
4 |
注册: dxSpreadSheetFunctionsRepository.Add(@sTriangleArea, fnTriangleArea, fpiTriangleArea, frkValue, 2048, ftMath); |
5 |
如此,你就可以在表格中,可直接插入使用公式。or用代码: SpreadSheet.ActiveSheetAsTable.CreateCell(12, 5).SetText(StringReplace('=TriangleArea(F9,F10,F11)', |