program Project1;
{$mode objfpc}{$H+}
uses
Classes, fpstypes, fpspreadsheet, xlsxooxml, fpsOpenDocument;
const
MARGIN = 2;
OUTER_COLOR = scBlack;
INNER_COLOR = scGray;
var
book: TsWorkbook;
sheet: TsWorksheet;
r, c: Cardinal;
procedure Border(ARow, ACol: Integer; ABorder: TsCellBorder; AColor: Integer;
ALineStyle: TsLineStyle);
var
cell: PCell;
currentBorders: TsCellBorders;
begin
cell := sheet.GetCell(ARow, ACol); // Create a cell!
currentBorders := sheet.ReadCellBorders(cell);
Include(currentBorders, ABorder);
sheet.WriteBorders(cell, currentBorders);
sheet.WriteBorderColor(cell, ABorder, AColor);
sheet.WriteBorderLineStyle(cell, ABorder, ALineStyle);
end;
begin
book := TsWorkbook.Create;
try
sheet := book.AddWorksheet('Sheet 1');
sheet.WriteColWidth(1, 30, suMillimeters);
sheet.WriteColWidth(2, 20, suMillimeters);
sheet.WriteColWidth(3, 15, suMillimeters);
sheet.WriteColWidth(4, 15, suMillimeters);
sheet.WriteColWidth(5, 15, suMillimeters);
sheet.WriteColWidth(6, 15, suMillimeters);
sheet.WriteColWidth(7, 15, suMillimeters);
sheet.WriteColWidth(8, 15, suMillimeters);
sheet.WriteRowHeight(0, MARGIN, suMillimeters);
sheet.WriteColWidth(0, MARGIN, suMillimeters);
sheet.WriteText(1, 1, 'Component');
sheet.WriteText(1, 2, 'Part Value');
sheet.WriteText(1, 3, 'Voltage Rating');
sheet.WriteText(1, 6, 'Reference');
sheet.WriteText(2, 2, 'Text');
sheet.WriteText(2, 3, 'Text');
sheet.WriteText(2, 4, 'Visible');
sheet.WriteText(2, 5, 'Location');
sheet.WriteText(2, 6, 'Text');
sheet.WriteText(2, 7, 'Location');
sheet.WriteText(2, 8, 'Visible');
sheet.MergeCells(1, 3, 1, 5);
sheet.MergeCells(1, 6, 1,;
{ Outer lines }
for r := 1 to 2 do
for c := 1 to 8 do begin
sheet.WriteHorAlignment(r, c, haCenter);
sheet.WriteBackgroundColor(r, c, $C0DCC0);
end;
for c := 1 to 8 do begin
Border(1, c, cbNorth, OUTER_COLOR, lsMedium);
Border(2, c, cbSouth, OUTER_COLOR, lsMedium);
end;
{ Vertical outer lines and non-subfield lines }
for r := 1 to 30 do
for c in [1, 2, 3, 6, 9] do
Border(r, c, cbWest, OUTER_COLOR, lsMedium);
{ Horizontal inner line }
for c := 3 to 8 do
Border(1, c, cbSouth, INNER_COLOR, lsThin);
{ Vertical inner subfield lines }
for r := 2 to 30 do
for c in [3, 4, 6, 7] do
Border(r, c, cbEast, INNER_COLOR, lsThin);
sheet.Options := sheet.Options - [soShowGridLines];
sheet.SelectCell(1, 0);
book.WriteToFile('test.xlsx', sfOOXML);
book.WriteToFile('test.ods', sfOpenDocument);
finally
book.Free;
end;
end.