FPSpreadsheet: Improves the formula example, finishes basic implementation of RPN formula support in BIFF8

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1662 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
sekelsenmat
2011-05-30 10:23:55 +00:00
parent d2c9b9085f
commit 3be59f2c78
2 changed files with 34 additions and 14 deletions

View File

@ -30,20 +30,42 @@ begin
MyWorksheet.WriteUTF8Text(0, 1, 'Text Formula');// B1
MyWorksheet.WriteUTF8Text(0, 2, 'RPN');// C1
MyWorksheet.WriteUTF8Text(1, 0, '=Sum(D2:d5)'); // A2
MyFormula.FormulaStr := '=Sum(D2:d5)';
// =Sum(E2:e5)
MyWorksheet.WriteUTF8Text(1, 0, '=Sum(E2:e5)'); // A2
//
MyFormula.FormulaStr := '=Sum(DE:e5)';
MyFormula.DoubleValue := 0.0;
MyWorksheet.WriteFormula(1, 1, MyFormula); // B2
//
SetLength(MyRPNFormula, 2);
MyRPNFormula[0].ElementKind := fekCellRange;
MyRPNFormula[0].Row := 1;
MyRPNFormula[0].Row2 := 4;
MyRPNFormula[0].Col := 3;
MyRPNFormula[0].Col2 := 3;
MyRPNFormula[0].Col := 4;
MyRPNFormula[0].Col2 := 4;
MyRPNFormula[1].ElementKind := fekOpSUM;
MyWorksheet.WriteRPNFormula(1, 2, MyRPNFormula); // C2
// Write the formula =ABS(E1)
MyWorksheet.WriteUTF8Text(2, 0, '=ABS(E1)'); // A3
//
SetLength(MyRPNFormula, 2);
MyRPNFormula[0].ElementKind := fekCell;
MyRPNFormula[0].Col := 4;
MyRPNFormula[0].Row := 0;
MyRPNFormula[1].ElementKind := fekABS;
MyWorksheet.WriteRPNFormula(2, 2, MyRPNFormula);
// Write the formula =4+5
MyWorksheet.WriteUTF8Text(3, 0, '=4+5'); // A4
//
SetLength(MyRPNFormula, 3);
MyRPNFormula[0].ElementKind := fekNum;
MyRPNFormula[0].DoubleValue := 4.0;
MyRPNFormula[1].ElementKind := fekNum;
MyRPNFormula[1].DoubleValue := 5.0;
MyRPNFormula[2].ElementKind := fekAdd;
MyWorksheet.WriteRPNFormula(3, 2, MyRPNFormula);
end;
procedure WriteSecondWorksheet();

View File

@ -861,7 +861,12 @@ begin
{ Additional data }
case TokenID of
{ Operand Tokens }
//fekCell: Result := INT_EXCEL_TOKEN_TREFR;
INT_EXCEL_TOKEN_TREFR, INT_EXCEL_TOKEN_TREFV, INT_EXCEL_TOKEN_TREFA: { fekCell }
begin
AStream.WriteWord(AFormula[i].Row and MASK_EXCEL_ROW);
AStream.WriteByte(AFormula[i].Col);
Inc(RPNLength, 3);
end;
INT_EXCEL_TOKEN_TAREA_R: { fekCellRange }
begin
@ -890,13 +895,6 @@ begin
INT_EXCEL_TOKEN_TADD, INT_EXCEL_TOKEN_TSUB, INT_EXCEL_TOKEN_TMUL,
INT_EXCEL_TOKEN_TDIV, INT_EXCEL_TOKEN_TPOWER: begin end;
INT_EXCEL_TOKEN_TREFR, INT_EXCEL_TOKEN_TREFV, INT_EXCEL_TOKEN_TREFA:
begin
AStream.WriteWord(AFormula[i].Row and MASK_EXCEL_ROW);
AStream.WriteByte(AFormula[i].Col);
Inc(RPNLength, 3);
end;
{ Other operations }
INT_EXCEL_TOKEN_TATTR: { fekOpSUM }
begin