fpspreadsheet: Catch formula errors in ODS reader.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8067 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2021-08-08 16:18:51 +00:00
parent e9fc0f2a36
commit ac50969b7f
2 changed files with 18 additions and 7 deletions

View File

@ -2664,11 +2664,16 @@ begin
end;
// ... and store in cell's FormulaValue field. Convert from ODS to ExcelA1 dialect.
formula := TsWorksheet(FWorksheet).Formulas.AddFormula(ARow, ACol);
formula^.Parser := TsSpreadsheetParser.Create(FWorksheet);
formula^.Parser.Expression[fdOpenDocument] := formulaStr; // Parse in ODS dialect
formula^.Text := formula^.Parser.Expression[fdExcelA1]; // Convert to Excel A1 dialect
cell^.Flags := cell^.Flags + [cfHasFormula];
try
formula := TsWorksheet(FWorksheet).Formulas.AddFormula(ARow, ACol);
formula^.Parser := TsSpreadsheetParser.Create(FWorksheet);
formula^.Parser.Expression[fdOpenDocument] := formulaStr; // Parse in ODS dialect
formula^.Text := formula^.Parser.Expression[fdExcelA1]; // Convert to Excel A1 dialect
cell^.Flags := cell^.Flags + [cfHasFormula];
except
on E:EExprParser do
Workbook.AddErrorMsg(E.Message);
end;
{$IFDEF FPSpreadDebug}
DebugLn(' Formula found: ' + formula);

View File

@ -6489,8 +6489,14 @@ begin
ok := true;
UpdateCaches;
if (boAutoCalc in Options) then
CalcFormulas;
// Recalc;
try
CalcFormulas;
except
on E: EExprParser do
AddErrorMsg(E.Message);
on E: ECalcEngine do
AddErrorMsg(E.Message);
end;
FFormatID := AFormatID;
finally
FReadWriteFlag := rwfNormal;