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
|
var
|
||||||
MyFormula: TsFormula;
|
MyFormula: TsFormula;
|
||||||
MyRPNFormula: TsRPNFormula;
|
MyRPNFormula: TsRPNFormula;
|
||||||
|
MyCell: PCell;
|
||||||
begin
|
begin
|
||||||
MyWorksheet := MyWorkbook.AddWorksheet('Worksheet1');
|
MyWorksheet := MyWorkbook.AddWorksheet('Worksheet1');
|
||||||
|
|
||||||
@@ -61,6 +62,15 @@ begin
|
|||||||
RPNNumber(4.0,
|
RPNNumber(4.0,
|
||||||
RPNNumber(5.0,
|
RPNNumber(5.0,
|
||||||
RPNFunc(fekAdd, nil)))));
|
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;
|
end;
|
||||||
|
|
||||||
procedure WriteSecondWorksheet();
|
procedure WriteSecondWorksheet();
|
||||||
|
@@ -1007,9 +1007,9 @@ begin
|
|||||||
begin
|
begin
|
||||||
AElement.ElementKind := fekCell;
|
AElement.ElementKind := fekCell;
|
||||||
if (rfRelRow in AElement.RelFlags) then
|
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
|
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;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@@ -2397,7 +2397,8 @@ begin
|
|||||||
if (rfRelCol in AFlags) then r := r + MASK_EXCEL_RELATIVE_COL;
|
if (rfRelCol in AFlags) then r := r + MASK_EXCEL_RELATIVE_COL;
|
||||||
AStream.WriteWord(WordToLE(r));
|
AStream.WriteWord(WordToLE(r));
|
||||||
// Column address
|
// Column address
|
||||||
c := Lo(AColOffset);
|
c := Lo(word(AColOffset));
|
||||||
|
//c := Lo(AColOffset);
|
||||||
AStream.WriteByte(c);
|
AStream.WriteByte(c);
|
||||||
// Number of bytes written
|
// Number of bytes written
|
||||||
Result := 3;
|
Result := 3;
|
||||||
@@ -2910,7 +2911,7 @@ begin
|
|||||||
while r <= FWorksheet.GetLastRowIndex do
|
while r <= FWorksheet.GetLastRowIndex do
|
||||||
begin
|
begin
|
||||||
cell := FWorksheet.FindCell(r, c);
|
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
|
r2 := r
|
||||||
else
|
else
|
||||||
break;
|
break;
|
||||||
|
Reference in New Issue
Block a user