You've already forked lazarus-ccr
fpspreadsheet: Rearrange ODS reading code for conditional formats.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7552 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@@ -868,6 +868,9 @@ procedure RegisterFunction(const AName: ShortString; const AResultType: Char;
|
||||
procedure RegisterFunction(const AName: ShortString; const AResultType: Char;
|
||||
const AParamTypes: String; const AExcelCode: Integer; ACallBack: TsExprFunctionEvent); overload;
|
||||
|
||||
function ConvertFormulaDialect(AFormula: String;
|
||||
ASrcDialect, ADestDialect: TsFormulaDialect; AWorksheet: TsBasicWorksheet): String;
|
||||
|
||||
var
|
||||
// Format settings used in stored parsed formulas.
|
||||
ExprFormatSettings: TFormatSettings;
|
||||
@@ -4903,6 +4906,40 @@ begin
|
||||
Result.ResString := AValue;
|
||||
end;
|
||||
|
||||
|
||||
function ConvertFormulaDialect(AFormula: String;
|
||||
ASrcDialect, ADestDialect: TsFormulaDialect; AWorksheet: TsBasicWorksheet): String;
|
||||
var
|
||||
parser: TsSpreadsheetParser;
|
||||
begin
|
||||
if ASrcDialect = ADestDialect then
|
||||
begin
|
||||
Result := AFormula;
|
||||
exit;
|
||||
end;
|
||||
|
||||
if (ASrcDialect = fdExcelR1C1) or (ADestDialect = fdExcelR1C1) then
|
||||
raise Exception.Create('ConvertFormulaDialect cannot be used for Excel R1C1 syntax.');
|
||||
|
||||
parser := TsSpreadsheetParser.Create(AWorksheet);
|
||||
try
|
||||
try
|
||||
parser.Expression[ASrcDialect] := AFormula; // Parse in source dialect
|
||||
Result := parser.Expression[ADestDialect]; // Convert to destination dialect
|
||||
except
|
||||
on EGeneralExprParserError do
|
||||
begin
|
||||
Result := AFormula;
|
||||
(AWorksheet as TsWorksheet).Workbook.AddErrorMsg('Error converting formula "' + AFormula + '"');
|
||||
end;
|
||||
end;
|
||||
finally
|
||||
parser.Free;
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
|
||||
{@@ ---------------------------------------------------------------------------
|
||||
Registers a non-built-in function:
|
||||
|
||||
|
Reference in New Issue
Block a user