You've already forked lazarus-ccr
fpspreadsheet: Fix shared formula incorrectly written assigned to cell row. Add shared formula to demo_write_formula.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3496 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -23,6 +23,7 @@ procedure WriteFirstWorksheet();
|
||||
var
|
||||
MyFormula: TsFormula;
|
||||
MyRPNFormula: TsRPNFormula;
|
||||
MyCell: PCell;
|
||||
begin
|
||||
MyWorksheet := MyWorkbook.AddWorksheet('Worksheet1');
|
||||
|
||||
@ -61,6 +62,15 @@ begin
|
||||
RPNNumber(4.0,
|
||||
RPNNumber(5.0,
|
||||
RPNFunc(fekAdd, nil)))));
|
||||
|
||||
// Write a shared formula "=E1+100" to the cell range F1:F5
|
||||
// Please note that shared formulas are not written by sfOOXML and sfOpenDocument formats.
|
||||
MyCell := MyWorksheet.WriteRPNFormula(0, 5, CreateRPNFormula(
|
||||
RPNCellOffset(0, -1, [rfRelRow, rfRelCol],
|
||||
RPNNumber(100,
|
||||
RPNFunc(fekAdd, nil)))));
|
||||
MyWorksheet.UseSharedFormula('F1:F5', MyCell);
|
||||
|
||||
end;
|
||||
|
||||
procedure WriteSecondWorksheet();
|
||||
|
@ -1007,9 +1007,9 @@ begin
|
||||
begin
|
||||
AElement.ElementKind := fekCell;
|
||||
if (rfRelRow in AElement.RelFlags) then
|
||||
AElement.Row := Integer(ACell^.Row) + Integer(AElement.Row); // AElement.Row means here: "RowOffsset"
|
||||
AElement.Row := ACell^.Row + Integer(AElement.Row); // AElement.Row means here: "RowOffsset"
|
||||
if (rfRelCol in AElement.RelFlags) then
|
||||
AElement.Col := Integer(ACell^.Col) + Integer(AElement.Col); // AElement.Col means here: "ColOffsset"
|
||||
AElement.Col := ACell^.Col + Integer(AElement.Col); // AElement.Col means here: "ColOffsset"
|
||||
end;
|
||||
end;
|
||||
|
||||
|
@ -2397,7 +2397,8 @@ begin
|
||||
if (rfRelCol in AFlags) then r := r + MASK_EXCEL_RELATIVE_COL;
|
||||
AStream.WriteWord(WordToLE(r));
|
||||
// Column address
|
||||
c := Lo(AColOffset);
|
||||
c := Lo(word(AColOffset));
|
||||
//c := Lo(AColOffset);
|
||||
AStream.WriteByte(c);
|
||||
// Number of bytes written
|
||||
Result := 3;
|
||||
@ -2910,7 +2911,7 @@ begin
|
||||
while r <= FWorksheet.GetLastRowIndex do
|
||||
begin
|
||||
cell := FWorksheet.FindCell(r, c);
|
||||
if (cell <> nil) and (cell^.SharedFormulaBase <> ACell^.SharedFormulaBase) then
|
||||
if (cell <> nil) and (cell^.SharedFormulaBase = ACell^.SharedFormulaBase) then
|
||||
r2 := r
|
||||
else
|
||||
break;
|
||||
|
Reference in New Issue
Block a user