TDXSpreadSheet中自定义公式函数三大步骤

看其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)',
    ',', SpreadSheet.FormulaController.FormatSettings.Data.ListSeparator, [rfReplaceAll, rfIgnoreCase]), True);

原文地址:https://www.cnblogs.com/usegear/p/15414686.html