fpspreadsheet: Add to error log when a file with unknown formula is read.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@6821 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2019-02-27 20:47:33 +00:00
parent 17d4e8186a
commit a6e527d8c1

View File

@ -5839,7 +5839,7 @@ end;
procedure TsWorksheet.WriteFormula(ACell: PCell; AFormula: string; procedure TsWorksheet.WriteFormula(ACell: PCell; AFormula: string;
ALocalized: Boolean = false); ALocalized: Boolean = false);
var var
parser: TsExpressionParser; parser: TsExpressionParser = nil;
formula: PsFormula; formula: PsFormula;
begin begin
if ACell = nil then if ACell = nil then
@ -5852,6 +5852,7 @@ begin
end; end;
formula := FFormulas.AddFormula(ACell^.Row, ACell^.Col, AFormula); formula := FFormulas.AddFormula(ACell^.Row, ACell^.Col, AFormula);
// wp: Why is this created when boIgnoreFormulas is active?
if not (boIgnoreFormulas in Workbook.Options) then if not (boIgnoreFormulas in Workbook.Options) then
begin begin
@ -5860,11 +5861,26 @@ begin
AFormula := Copy(AFormula, 2, Length(AFormula)); AFormula := Copy(AFormula, 2, Length(AFormula));
parser := TsSpreadsheetParser.Create(self); parser := TsSpreadsheetParser.Create(self);
if ALocalized then try
parser.LocalizedExpression[Workbook.FormatSettings] := AFormula if ALocalized then
else parser.LocalizedExpression[Workbook.FormatSettings] := AFormula
parser.Expression := AFormula; else
AFormula := parser.Expression; parser.Expression := AFormula;
AFormula := parser.Expression;
except
on E:Exception do begin
if FWorkbook.FReadWriteFlag = rwfNormal then
raise
else begin
FWorkbook.AddErrorMsg('Formula error in cell "%s!%s": %s', [
FName, GetCellString(ACell^.Row, ACell^.Col), E.Message]
);
parser.Free;
FFormulas.DeleteFormula(ACell^.Row, ACell^.Col);
exit;
end;
end;
end;
if parser.Has3DLinks then if parser.Has3DLinks then
ACell.Flags := ACell.Flags + [cf3dFormula] ACell.Flags := ACell.Flags + [cf3dFormula]