avadim / fast-excel-reader
Lightweight and very fast XLSX Excel Spreadsheet and CSV Reader in PHP
Requires
- php: >=7.4
- ext-ctype: *
- ext-dom: *
- ext-mbstring: *
- ext-xmlreader: *
- ext-zip: *
- avadim/fast-excel-helper: ^1.4
Requires (Dev)
- phpunit/phpunit: ^9.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
- dev-main
- v4.5.0
- v4.4.3
- v4.4.2
- v4.4.1
- v4.4.0
- v4.3.0
- v4.2.0
- v4.1.0
- v4.0.1
- v4.0.0
- v3.2.0
- v3.1.0
- v3.0.3
- v3.0.2
- v3.0.1
- v3.0.0
- v2.30.0
- v2.29.1
- v2.29.0
- v2.28.1
- v2.28.0
- v2.27.0
- v2.26.2
- v2.26.1
- v2.26.0
- v2.25.1
- v2.25.0
- v2.24.0
- v2.23.0
- v2.22.1
- v2.22.0
- v2.21.1
- v2.21.0
- v2.20.0
- v2.19.0
- v2.18.2
- v2.18.1
- v2.18.0
- v2.17.1
- v2.17.0
- v2.16.0
- v2.15.5
- v2.15.4
- v2.15.3
- v2.15.2
- v2.15.1
- v2.15.0
- v2.14.2
- v2.14.1
- v2.14.0
- v2.12.0
- v2.11.0
- v2.10.0
- v2.9.2
- v2.9.1
- v2.9.0
- v2.8.4
- v2.8.3
- v2.8.2
- v2.8.1
- v2.8.0
- v2.7.0
- v2.6.0
- v2.5.0
- v2.4.2
- v2.4.1
- v2.4.0
- v2.3.2
- v2.3.1
- v2.3.0
- v2.2.5
- v2.2.4
- v2.2.3
- v2.2.0
- v2.1.2
- v2.1.1
- v2.1.0
- v2.0.2
- v2.0.1
- v2.0.0
- v1.4.2
- v1.4.1
- v1.4.0
- v1.3.4
- v1.3.3
- v1.3.2
- v1.3.1
- dev-dev
- dev-skipRows
This package is auto-updated.
Last update: 2026-10-08 17:08:09 UTC
README
FastExcelReader
π¬π§ English Β· π·πΊ Π ΡΡΡΠΊΠΈΠΉ
FastExcelReader is a part of the FastExcelPhp Project which consists of
- FastExcelWriter - to create Excel spreadsheets
- FastExcelReader - to reader Excel spreadsheets and CSV-files
- FastExcelTemplator - to generate Excel spreadsheets from XLSX templates
- FastExcelLaravel - special Laravel edition
Introduction
This library is designed to be lightweight, super-fast and requires minimal memory usage.
FastExcelReader can read Excel compatible spreadsheets in XLSX format (Office 2007+), legacy XLS format (Office 97-2003) and CSV-files. It only reads data, but it does it very quickly and with minimal memory usage.
Features
XLSX format support
- Supports XLSX format (Office 2007+) with multiple worksheets
- Supports autodetect currency/numeric/date types
- Supports auto formatter and custom formatter of datetime values
- The library can define and extract images from XLSX files
- The library can read styling options of cells - formatting patterns, colors, borders, fonts, etc.
XLS format support
- Supports legacy XLS format (Office 97-2003, BIFF8) with the same API as XLSX
- Values, dates, cell styles, formula text and images are all returned in the same shape
- The format is chosen by the file signature, not by the extension
- Streaming row iteration; workbook metadata, shared strings and images still consume memory
CSV format support
- Openable via
Excel::open()as a normal one-sheet workbook with the same reading API as XLSX/XLS, or viaExcel::openCsv()for the low-level engine - Delimiter Detection: Automatic detection or manual specification of column delimiters.
- Wide Encoding Support: Any encoding supported by your PHP environment
- Supports fields with or without quotes, and escaped quotes (doubled quotes).
- Multi-line Fields Handles line breaks within quoted fields.
- Two modes - strict (follows RFC 4180) and tolerant (with non-standard CSV files)
Installation
Use composer to install FastExcelReader into your project:
composer require avadim/fast-excel-reader
Quick start
use \avadim\FastExcelReader\Excel; // XLSX, legacy XLS and CSV are all opened this way; the reader is chosen by the file signature $excel = Excel::open(__DIR__ . '/files/demo.xlsx'); // Read all rows into a two-dimensional array (ROW x COL) $rows = $excel->readRows(); // Or read row by row (memory efficient) $sheet = $excel->sheet(); foreach ($sheet->nextRow() as $rowNum => $rowData) { // handle $rowData }
See more in the Getting Started guide.
Choosing an opening method
Since 4.5, use an explicit factory when the format or API level is known:
| Method | Returns | Use |
|---|---|---|
Excel::open($file, $options) |
AbstractBook |
Detect XLSX/XLS/CSV by content |
Excel::openXlsx($file) |
Excel |
Require XLSX, without falling back to CSV |
Excel::openXls($file) |
XlsBook |
Require legacy BIFF8 XLS |
Excel::openCsvBook($file, $options) |
CsvBook |
CSV through the common book/sheet API |
Excel::openCsvReader($file, $options) |
CsvReader |
Low-level CSV engine |
CSV options accept an array, CsvOptions, or null. Explicit CSV factories accept an
empty CSV; the generic open() rejects empty input. open() only supports forcing
['format' => 'csv']; use openXlsx() or openXls() to require those formats.
Preparing for 5.0: openCsv() still returns CsvReader in 4.x, but is planned to
return CsvBook in 5.0. Replace low-level calls with openCsvReader() to retain
methods such as getCsvLine() and fromRow(). Choose openCsvBook() for book/sheet
code; getReader() on that book also provides the low-level engine.
isXlsx() checks a ZIP signature and isXls() an OLE2 signature; neither proves that
an arbitrary container is a supported workbook. validate() checks required XLSX
parts and XML well-formedness, not full OOXML schemas or formula correctness.
Format capabilities and resource limits
| Capability | XLSX | XLS (BIFF8) | CSV |
|---|---|---|---|
| Common book/sheet API and row generators | Yes | Yes | Yes, one sheet |
| Styles and embedded images | Yes | Yes, format limitations apply | No |
| Formula text / cached results | Read, not calculated | Read, supported formula subset | Plain text |
| Cell hyperlinks / document properties | Yes | Not exposed by these APIs | No |
| Input encoding | XML encoding | BIFF strings/codepage | Auto or explicit CsvOptions |
readRows() collects the result in memory; use nextRow() for large imports.
Shared strings are loaded into memory for XLSX and XLS, and XLS also loads its global
image store. Streaming rows therefore does not imply constant memory for the whole workbook.
openString() and openStream() copy input to disk. Their successful temporary files
live until process shutdown, including in long-running workers; destroying a book does
not remove them immediately. A book-level close() is not available in 4.5.
Documentation
Guides
- Getting Started β read cells, rows and columns
- Reading Data β row by row, array keys, empty cells & rows
- Advanced Reading β read areas, defined names, callbacks
- Cell Value Types & Date Formatter
- Cell Styles β read complete style info of cells
- Images β extract images from XLSX
- Sheet Metadata β data validation, column widths, row heights, freeze pane, tab color, merged cells, dimensions
- CSV Parsing β reading CSV files
- XLS (Excel 97-2003) β reading legacy XLS workbooks
API Reference
Examples
You can find more examples in the /demo folder.
Changelog
See CHANGELOG.md for the list of changes.
Do you want to support FastExcelReader?
if you find this package useful you can give me a star on GitHub.
Or you can donate me :)
- USDT (TRC20) TSsUFvJehQBJCKeYgNNR1cpswY6JZnbZK7
- USDT (ERC20) 0x5244519D65035aF868a010C2f68a086F473FC82b
- ETH 0x5244519D65035aF868a010C2f68a086F473FC82b