You've already forked lazarus-ccr
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:
@ -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);
|
||||
|
@ -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;
|
||||
|
Reference in New Issue
Block a user