
NOTE: This revision breaks existing code if the worksheet's DefaultRowHeight/DefaultColWidth is changed - value must be in millimeters now. Methods for accessing individual row heiths and column widths are fine, but are marked as deprecated, they use the old units. Optionally a unit parameter can be specified. git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@4568 8e941d3f-bd1b-0410-a28a-d453659cc2b4
107 lines
2.5 KiB
ObjectPascal
107 lines
2.5 KiB
ObjectPascal
{
|
|
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.
|
|
|