fpspreadsheet: Experimental change related to recursive formulas.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@9387 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz 2024-07-17 10:46:51 +00:00
parent 96338e6a58
commit d7fad0c7b8

View File

@ -1344,6 +1344,7 @@ var
res: TsExpressionResult; res: TsExpressionResult;
p: Integer; p: Integer;
link, txt: String; link, txt: String;
changed: Boolean;
begin begin
if (boIgnoreFormulas in Workbook.Options) or (AFormula = nil) then if (boIgnoreFormulas in Workbook.Options) or (AFormula = nil) then
exit; exit;
@ -1384,13 +1385,38 @@ begin
try try
// Assign formula result // Assign formula result
case res.ResultType of case res.ResultType of
rtEmpty : WriteBlank(lCell, true); rtEmpty:
rtError : WriteErrorValue(lCell, res.ResError); begin
rtInteger : WriteNumber(lCell, res.ResInteger); changed := (lCell^.ContentType <> cctEmpty);
rtFloat : WriteNumber(lCell, res.ResFloat); if changed then WriteBlank(lCell, true);
rtDateTime : WriteDateTime(lCell, res.ResDateTime); end;
rtString : WriteText(lCell, res.ResString); rtError:
rtHyperlink : begin begin
changed := (lCell^.ContentType <> cctError) or (lCell^.ErrorValue <> res.ResError);
if changed then WriteErrorValue(lCell, res.ResError);
end;
rtInteger:
begin
changed := (lCell^.ContentType <> cctNumber) or (lCell^.Numbervalue <> res.ResInteger);
if changed then WriteNumber(lCell, res.ResInteger);
end;
rtFloat:
begin
changed := (lCell^.ContentType <> cctNumber) or (lCell^.NumberValue <> res.ResFloat);
if changed then WriteNumber(lCell, res.ResFloat);
end;
rtDateTime:
begin
changed := (lCell^.ContentType <> cctDateTime) or (lCell^.DateTimeValue <> res.ResDateTime);
if changed then WriteDateTime(lCell, res.ResDateTime);
end;
rtString:
begin
changed := (lCell^.ContentType <> cctUTF8String) or (lCell^.UTF8StringValue <> res.ResString);
if changed then WriteText(lCell, res.ResString);
end;
rtHyperlink :
begin
link := ArgToString(res); link := ArgToString(res);
p := pos(HYPERLINK_SEPARATOR, link); p := pos(HYPERLINK_SEPARATOR, link);
if p > 0 then if p > 0 then
@ -1402,8 +1428,13 @@ begin
WriteHyperlink(lCell, link); WriteHyperlink(lCell, link);
WriteText(lCell, txt); WriteText(lCell, txt);
end; end;
rtBoolean : WriteBoolValue(lCell, res.ResBoolean); rtBoolean:
rtCell : begin begin
changed := (lCell^.ContentType <> cctBool) or (lCell^.BoolValue <> res.ResBoolean);
if changed then WriteBoolValue(lCell, res.ResBoolean);
end;
rtCell:
begin
if res.Worksheet = nil then if res.Worksheet = nil then
begin begin
if res.ResSheetName = '' then if res.ResSheetName = '' then
@ -1416,6 +1447,7 @@ begin
exit; exit;
end; end;
end else end else
begin
if res.ResSheetName <> '' then if res.ResSheetName <> '' then
res.Worksheet := Workbook.GetWorksheetByName(res.ResSheetname); res.Worksheet := Workbook.GetWorksheetByName(res.ResSheetname);
lCellRef := (res.Worksheet as TsWorksheet).FindCell(res.ResRow, res.ResCol); lCellRef := (res.Worksheet as TsWorksheet).FindCell(res.ResRow, res.ResCol);
@ -1432,6 +1464,7 @@ begin
WriteBlank(lCell, true); WriteBlank(lCell, true);
end; end;
end; end;
end;
finally finally
FWorkbook.UnlockFormulas; FWorkbook.UnlockFormulas;
end; end;