Overview
libxlsxwriter is a C library for creating Excel .xlsx files compatible with Excel 2007+, LibreOffice, and Google Sheets. Supports multiple worksheets, cell formatting (fonts, colors, borders), formulas, merged cells, freeze panes, charts, and embedded images.
CLib package
Ubuntu/Debian: sudo apt install libxlsxwriter-dev
Create a Workbook
uses libxlsxwriter;
var wb := NewWorkbook('/tmp/report.xlsx');
var ws := AddWorksheet(wb, 'Sales');
{ write header row }
WriteString(ws, 0, 0, 'Product', 0);
WriteString(ws, 0, 1, 'Units', 0);
WriteString(ws, 0, 2, 'Revenue', 0);
{ write data }
WriteString(ws, 1, 0, 'Widget A', 0);
WriteNumber(ws, 1, 1, 1200, 0);
WriteNumber(ws, 1, 2, 36000.0, 0);
WriteString(ws, 2, 0, 'Widget B', 0);
WriteNumber(ws, 2, 1, 850, 0);
WriteNumber(ws, 2, 2, 29750.0, 0);
{ write a formula }
WriteFormula(ws, 3, 2, '=SUM(C2:C3)', 0);
CloseWorkbook(wb);
Cell Formatting
uses libxlsxwriter;
var wb := NewWorkbook('/tmp/styled.xlsx');
var ws := AddWorksheet(wb, 'Report');
{ header format: bold, centered, blue background }
var hdrFmt := NewFormat(wb);
SetBold(hdrFmt);
SetAlign(hdrFmt, xlsxAlignCenter);
SetBgColor(hdrFmt, $4472C4);
SetFontColor(hdrFmt, $FFFFFF);
SetFontSize(hdrFmt, 12.0);
{ number format with 2 decimals and thousands separator }
var numFmt := NewFormat(wb);
SetNumFormat(numFmt, '#,##0.00');
SetBorder(numFmt, xlsxBorderThin);
WriteString(ws, 0, 0, 'Revenue', hdrFmt);
WriteNumber(ws, 1, 0, 1234567.89, numFmt);
{ date format }
var dateFmt := NewFormat(wb);
SetNumFormat(dateFmt, 'dd/mm/yyyy');
WriteString(ws, 2, 0, '2026-03-13', dateFmt);
CloseWorkbook(wb);
Column Sizing & Freeze Panes
uses libxlsxwriter;
var wb := NewWorkbook('/tmp/layout.xlsx');
var ws := AddWorksheet(wb, 'Data');
{ set column widths }
SetColumnWidth(ws, 0, 0, 20.0); { column A: 20 chars }
SetColumnWidth(ws, 1, 3, 12.0); { columns B-D: 12 chars }
{ freeze the first row (header stays visible when scrolling) }
FreezePane(ws, 1, 0);
{ set row height }
SetRowHeight(ws, 0, 24.0); { header row taller }
{ color the tab }
SetTabColor(ws, $70AD47); { green }
CloseWorkbook(wb);
Charts
uses libxlsxwriter;
var wb := NewWorkbook('/tmp/chart.xlsx');
var ws := AddWorksheet(wb, 'Data');
{ write data for the chart }
var i: Integer;
for i := 0 to 4 do begin
WriteNumber(ws, i, 0, i + 1, 0); { month }
WriteNumber(ws, i, 1, 100 + i*23, 0); { sales }
end;
{ create column chart }
var chart := AddChart(wb, xlsxChartColumn);
ChartAddSeries(chart, 'Data!$A$1:$A$5', 'Data!$B$1:$B$5');
ChartSetTitle(chart, 'Monthly Sales');
{ insert chart at cell E1 }
InsertChart(ws, 0, 4, chart);
CloseWorkbook(wb);
Merge & URLs
uses libxlsxwriter;
var wb := NewWorkbook('/tmp/misc.xlsx');
var ws := AddWorksheet(wb, 'Sheet1');
{ merge cells A1:D1 with centered text }
var mergeFmt := NewFormat(wb);
SetAlign(mergeFmt, xlsxAlignCenter);
SetBold(mergeFmt);
MergeRange(ws, 'A1:D1', 'Annual Report 2026', mergeFmt);
{ write a clickable URL }
WriteUrl(ws, 2, 0, 'https://pascalai.org', 'PascalAI', 0);
{ insert image }
InsertImage(ws, 4, 0, '/tmp/logo.png');
CloseWorkbook(wb);
Package Info
Version1.0.0
Typeclib
CategoryOffice
Authorgustavo
Format.xlsx (write only)
API
- NewWorkbook(path)
- CloseWorkbook(wb)
- AddWorksheet(wb,name)
- SetActiveSheet(ws)
- FreezePane(ws,row,col)
- SetTabColor(ws,color)
- WriteString(ws,r,c,v,fmt)
- WriteNumber(ws,r,c,v,fmt)
- WriteFormula(ws,r,c,f,fmt)
- WriteBoolean(ws,r,c,v,fmt)
- WriteUrl(ws,r,c,url,txt,fmt)
- MergeRange(ws,range,v,fmt)
- SetColumnWidth(ws,c1,c2,w)
- SetRowHeight(ws,row,h)
- NewFormat(wb)
- SetBold/Italic/Underline
- SetFontSize/Name/Color
- SetBgColor/Border/Align
- SetNumFormat(fmt,str)
- AddChart(wb,type)
- InsertChart(ws,r,c,chart)
- InsertImage(ws,r,c,path)