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, 1, 'Text Formula');// B1
MyWorksheet.WriteUTF8Text(0, 2, 'RPN');// C1 MyWorksheet.WriteUTF8Text(0, 2, 'RPN');// C1
MyWorksheet.WriteUTF8Text(1, 0, '=Sum(D2:d5)'); // A2 // =Sum(E2:e5)
MyWorksheet.WriteUTF8Text(1, 0, '=Sum(E2:e5)'); // A2
MyFormula.FormulaStr := '=Sum(D2:d5)'; //
MyFormula.FormulaStr := '=Sum(DE:e5)';
MyFormula.DoubleValue := 0.0; MyFormula.DoubleValue := 0.0;
MyWorksheet.WriteFormula(1, 1, MyFormula); // B2 MyWorksheet.WriteFormula(1, 1, MyFormula); // B2
//
SetLength(MyRPNFormula, 2); SetLength(MyRPNFormula, 2);
MyRPNFormula[0].ElementKind := fekCellRange; MyRPNFormula[0].ElementKind := fekCellRange;
MyRPNFormula[0].Row := 1; MyRPNFormula[0].Row := 1;
MyRPNFormula[0].Row2 := 4; MyRPNFormula[0].Row2 := 4;
MyRPNFormula[0].Col := 3; MyRPNFormula[0].Col := 4;
MyRPNFormula[0].Col2 := 3; MyRPNFormula[0].Col2 := 4;
MyRPNFormula[1].ElementKind := fekOpSUM; MyRPNFormula[1].ElementKind := fekOpSUM;
MyWorksheet.WriteRPNFormula(1, 2, MyRPNFormula); // C2 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; end;
procedure WriteSecondWorksheet(); procedure WriteSecondWorksheet();

View File

@ -861,7 +861,12 @@ begin
{ Additional data } { Additional data }
case TokenID of case TokenID of
{ Operand Tokens } { 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 } INT_EXCEL_TOKEN_TAREA_R: { fekCellRange }
begin begin
@ -890,13 +895,6 @@ begin
INT_EXCEL_TOKEN_TADD, INT_EXCEL_TOKEN_TSUB, INT_EXCEL_TOKEN_TMUL, 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_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 } { Other operations }
INT_EXCEL_TOKEN_TATTR: { fekOpSUM } INT_EXCEL_TOKEN_TATTR: { fekOpSUM }
begin begin