{ test_write_formula.pas Demonstrates how to write a formula using the fpspreadsheet library in the "hard way" by means of rpn formulas AUTHORS: Felipe Monteiro de Carvalho } program demo_write_formula; {$mode delphi}{$H+} uses Classes, SysUtils, fpsTypes, fpspreadsheet, xlsbiff5, xlsbiff8, fpsopendocument, fpsRPN; var MyWorkbook: TsWorkbook; MyWorksheet: TsWorksheet; MyDir: string; MyCell: PCell; procedure WriteFirstWorksheet(); var MyFormula: String; MyRPNFormula: TsRPNFormula; MyCell: PCell; begin MyWorksheet := MyWorkbook.AddWorksheet('Worksheet1'); // Write some cells MyWorksheet.WriteText(0, 1, 'Text Formula');// B1 MyWorksheet.WriteText(0, 2, 'RPN'); // C1 MyWorksheet.WriteNumber(0, 4, -3.14); // E1 MyWorksheet.WriteNumber(1, 4, 100); // E2 MyWorksheet.WriteNumber(2, 4, 200); // E3 Myworksheet.WriteNumber(3, 4, 300); // E4 MyWorksheet.WriteNumber(4, 4, 250); // E5 // =Sum(E2:E5) MyWorksheet.WriteText(1, 0, '=Sum(E2:E5)'); // A2 MyFormula := '=Sum(E2:E5)'; MyWorksheet.WriteFormula(1, 1, MyFormula); // B2 MyWorksheet.WriteRPNFormula(1, 2, CreateRPNFormula( // C2 RPNCellRange('E2:E5', RPNFunc('SUM', 1, nil)))); // Write the formula =ABS(E1) MyWorksheet.WriteText(2, 0, '=ABS(E1)'); // A3 MyWorksheet.WriteFormula(2, 1, 'ABS(E1)'); // B3 MyWorksheet.WriteRPNFormula(2, 2, CreateRPNFormula( // C3 RPNCellValue('E1', RPNFunc('ABS', nil)))); // Write the formula =4+5 MyWorksheet.WriteText(3, 0, '=4+5'); // A4 MyWorksheet.WriteFormula(3, 1, '=4+5'); // B4 MyWorksheet.WriteRPNFormula(3, 2, CreateRPNFormula( //C4 RPNNumber(4.0, RPNNumber(5.0, RPNFunc(fekAdd, nil))))); end; procedure WriteSecondWorksheet(); begin MyWorksheet := MyWorkbook.AddWorksheet('Worksheet2'); // Write some cells // Line 1 MyWorksheet.WriteText(1, 1, 'Relatório'); MyCell := MyWorksheet.GetCell(1, 1); MyWorksheet.WriteBorders(MyCell, [cbNorth, cbWest, cbSouth]); Myworksheet.WriteBackgroundColor(MyCell, scGray20pct); end; const TestFile='test_formula.xls'; {$R *.res} begin writeln('Starting program.'); MyDir := ExtractFilePath(ParamStr(0)); // Create the spreadsheet MyWorkbook := TsWorkbook.Create; try WriteFirstWorksheet(); WriteSecondWorksheet(); // Save the spreadsheet to a file MyWorkbook.WriteToFile(MyDir + TestFile, sfExcel8, True); finally MyWorkbook.Free; end; writeln('Finished. Please open "'+Testfile+'" in your spreadsheet program.'); end.