fpspreadsheet: Fix calculation of cells destroying number formats.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3274 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2014-07-03 19:28:42 +00:00
parent 81ff33e7d6
commit 20645fb0c4
2 changed files with 38 additions and 8 deletions

View File

@ -52,10 +52,10 @@ begin
if Args.PopNumberValues(NumArgs, false, data, Result) then
// Call our FV function with the NumberValues of the arguments.
Result := CreateNumber(FV(
data[0], // interest rate
data[1], // number of payments
data[2], // payment
data[3], // present value
data[0], // interest rate
data[1], // number of payments
data[2], // payment
data[3], // present value
round(data[4]) // payment type
));
end;

View File

@ -556,10 +556,12 @@ type
procedure WriteErrorValue(ACell: PCell; AValue: TsErrorValue); overload;
procedure WriteFormula(ARow, ACol: Cardinal; AFormula: TsFormula);
procedure WriteNumber(ARow, ACol: Cardinal; ANumber: double); overload;
procedure WriteNumber(ACell: PCell; ANumber: Double); overload;
procedure WriteNumber(ARow, ACol: Cardinal; ANumber: double;
AFormat: TsNumberFormat = nfGeneral; ADecimals: Byte = 2); overload;
AFormat: TsNumberFormat; ADecimals: Byte = 2); overload;
procedure WriteNumber(ACell: PCell; ANumber: Double;
AFormat: TsNumberFormat = nfGeneral; ADecimals: Byte = 2); overload;
AFormat: TsNumberFormat; ADecimals: Byte = 2); overload;
procedure WriteNumber(ARow, ACol: Cardinal; ANumber: double;
AFormat: TsNumberFormat; AFormatString: String); overload;
procedure WriteNumber(ACell: PCell; ANumber: Double;
@ -2415,6 +2417,34 @@ begin
ChangedCell(ACell^.Row, ACell^.Col);
end;
{@@
Writes a floating-point number to a cell. Does not change number format.
@param ARow Cell row index
@param ACol Cell column index
@param ANumber Number to be written
}
procedure TsWorksheet.WriteNumber(ARow, ACol: Cardinal; ANumber: double);
begin
WriteNumber(GetCell(ARow, ACol), ANumber);
end;
{@@
Writes a floating-point number to a cell. Does not change number format.
@param ARow Cell row index
@param ACol Cell column index
@param ANumber Number to be written
}
procedure TsWorksheet.WriteNumber(ACell: PCell; ANumber: double);
begin
if ACell <> nil then begin
ACell^.ContentType := cctNumber;
ACell^.NumberValue := ANumber;
ChangedCell(ACell^.Row, ACell^.Col);
end;
end;
{@@
Writes a floating-point number to a cell
@ -2426,7 +2456,7 @@ end;
@see TsNumberFormat
}
procedure TsWorksheet.WriteNumber(ARow, ACol: Cardinal; ANumber: double;
AFormat: TsNumberFormat = nfGeneral; ADecimals: Byte = 2);
AFormat: TsNumberFormat; ADecimals: Byte = 2);
begin
WriteNumber(GetCell(ARow, ACol), ANumber, AFormat, ADecimals);
end;
@ -2441,7 +2471,7 @@ end;
@see TsNumberFormat
}
procedure TsWorksheet.WriteNumber(ACell: PCell; ANumber: Double;
AFormat: TsNumberFormat = nfGeneral; ADecimals: Byte = 2);
AFormat: TsNumberFormat; ADecimals: Byte = 2);
begin
if IsDateTimeFormat(AFormat) or IsCurrencyFormat(AFormat) then
raise Exception.Create(lpInvalidNumberFormat);