Overview
libxls reads Excel 97–2003 binary (.xls / BIFF8) files — the format used before .xlsx existed. Use this when processing legacy data exports, old financial archives, or files from systems that still output .xls. Read-only: use libxlsxwriter to create spreadsheets.
CLib package
Ubuntu/Debian: sudo apt install libxls-dev
Open & Inspect
uses libxls;
var wb := OpenFile('/data/legacy.xls');
{ workbook info }
var info := GetWorkbookInfo(wb);
WriteLn('Sheets: ', info.SheetCount);
WriteLn('Author: ', info.Author);
{ list all sheet names }
WriteLn(GetSheetNames(wb)); { Sheet1\nData\nSummary\n... }
{ sheet metadata }
var si := GetSheetInfo(wb, 0); { index 0 = first sheet }
WriteLn('Name: ', si.Name, ' Rows: ', si.RowCount, ' Cols: ', si.ColCount);
CloseFile(wb);
Read Cells
uses libxls;
var wb := OpenFile('/data/report.xls');
var sheet := OpenFirstSheet(wb);
var rows := GetRowCount(sheet);
var cols := GetColCount(sheet);
WriteLn('Grid: ', rows, ' x ', cols);
{ read cell by cell }
var r, c: Integer;
for r := 0 to rows - 1 do begin
for c := 0 to cols - 1 do begin
var cell := GetCell(sheet, r, c);
case cell.CellType of
xlsCellString: Write(cell.StrValue, #9);
xlsCellNumber: Write(cell.NumValue:0:2, #9);
xlsCellBoolean: Write(cell.NumValue <> 0, #9);
end;
end;
WriteLn;
end;
CloseSheet(sheet);
CloseFile(wb);
Quick Row Scan
uses libxls;
var wb := OpenFile('data.xls');
var sheet := OpenSheetByName(wb, 'Sales');
{ read each row as a tab-separated string }
var rows := ReadAllRows(sheet);
var i: Integer;
for i := 0 to Length(rows) - 1 do
WriteLn(rows[i]);
CloseSheet(sheet);
CloseFile(wb);
Multiple Sheets
uses libxls;
var wb := OpenFile('workbook.xls');
var n := GetSheetCount(wb);
var i: Integer;
for i := 0 to n - 1 do begin
var si := GetSheetInfo(wb, i);
var sheet := OpenSheetByIndex(wb, i);
WriteLn('=== ', si.Name, ' (', si.RowCount, ' rows) ===');
WriteLn(GetRowAsString(sheet, 0)); { header row }
CloseSheet(sheet);
end;
CloseFile(wb);
In-Memory Open
uses libxls;
{ open from bytes (e.g. downloaded from network) }
var xlsBytes := FetchBytes('http://example.com/data.xls');
var wb := OpenBytes(xlsBytes);
var sheet := OpenFirstSheet(wb);
WriteLn('Rows: ', GetRowCount(sheet));
CloseSheet(sheet);
CloseFile(wb);
Package Info
Version1.0.0
Typeclib
CategoryOffice
Authorgustavo
Format.xls read only
API
- OpenFile(path)
- OpenBytes(data)
- CloseFile(wb)
- GetWorkbookInfo(wb)
- GetSheetCount(wb)
- GetSheetInfo(wb,idx)
- GetSheetNames(wb)
- OpenSheetByIndex(wb,i)
- OpenSheetByName(wb,name)
- OpenFirstSheet(wb)
- CloseSheet(s)
- GetRowCount(s)
- GetColCount(s)
- GetCell(s,r,c)
- GetCellString(s,r,c)
- GetCellNumber(s,r,c)
- GetCellType(s,r,c)
- GetRowAsString(s,row)
- ReadAllRows(s)
- IsXls(data)
Legacy format only
For modern .xlsx files use xlsxio (read+write) or libxlsxwriter (write with full formatting).