, (*1)
Spreadsheet_Excel_Writer
This package is Spreadsheet_Excel_Writer and has been migrated from svn.php.net., (*2)
Please report all new issues via the PEAR bug tracker., (*3)
If this package is marked as unmaintained and you have fixes, please submit your pull requests and start discussion on the pear-qa mailing list., (*4)
Installation
Pear
To test, run, (*5)
$ phpunit
To build, simply, (*6)
$ pear package
To install from scratch, (*7)
$ pear install package.xml
To upgrade, (*8)
$ pear upgrade -f package.xml
Composer
This package comes with support for Composer., (*9)
To install from Composer, (*10)
$ composer require pear/spreadsheet_excel_writer
To install the latest development version, (*11)
$ composer require pear/spreadsheet_excel_writer:dev-master
Features
- writing Excel (.XLS) spreadsheets
- support: strings (with formatting for text and cells), formulas, images (BMP)
Limitations
Library support only 2 types of format for writing XLS, also known as Binary Interchange File Format (BIFF):
- BIFF5 (Excel 5.0 - Excel 95)
- BIFF8 (Excel 98 - Excel 2003), (*12)
Some important limitations:, (*13)
Limit |
BIFF5 |
BIFF8 |
Maximum number of rows |
16384 |
65535 |
Maximum number of columns |
255 |
255 |
Maximum data size of a record |
2080 bytes |
8224 bytes |
Unicode support |
CodePage based character encoding |
UTF-16LE |
Explanation of formats and specifications you can find here (section "Useful references"), (*14)
Correct output only guaranteed with mbstring.func_overload = 0
otherwise, you should use workround mb_internal_encoding('latin1');
, (*15)
Usage
Basic usage
use Spreadsheet_Excel_Writer;
$filePath = __DIR__ . '/output/out.xls';
$xls = new Spreadsheet_Excel_Writer($filePath);
// 8 = BIFF8
$xls->setVersion(8);
$sheet = $xls->addWorksheet('info');
// only available with BIFF8
$sheet->setInputEncoding('UTF-8');
$headers = [
'id',
'name',
'email',
'code',
'address'
];
$row = $col = 0;
foreach ($headers as $header) {
$sheet->write($row, $col, $header);
$col++;
}
for ($id = 1; $id < 100; $id++) {
$data = [
'id' => $id,
'name' => 'Name Surname',
'email' => 'mail@gmail.com',
'password' => 'cfcd208495d565ef66e7dff9f98764da',
'address' => '00000 North Tantau Avenue. Cupertino, CA 12345. (000) 1234567'
];
$sheet->writeRow($id, 0, $data);
}
$xls->close();
$xls = new Spreadsheet_Excel_Writer();
$titleFormat = $xls->addFormat();
$titleFormat->setFontFamily('Helvetica');
$titleFormat->setBold();
$titleFormat->setSize(10);
$titleFormat->setColor('orange');
$titleFormat->setBorder(1);
$titleFormat->setBottom(2);
$titleFormat->setBottomColor(44);
$titleFormat->setAlign('center');
$sheet = $xls->addWorksheet('info');
$sheet->write(0, 0, 'Text 123', $titleFormat);
$xls = new Spreadsheet_Excel_Writer();
$xls->send('excel_'.date("Y-m-d__H:i:s").'.xls');
Platform:
Intel(R) Core(TM) i5-4670 CPU @ 3.40GHz
PHP 7.4, (*16)
Test case:
Write xls (BIFF8 format, UTF-8), by 5 cells (1x number, 4x string without format/styles, average line length = 120 char) in each row, (*17)
Estimated performance:, (*18)
Number of rows |
Time (seconds) |
Peak memory usage (MB) |
10000 |
0.2 |
4 |
20000 |
0.4 |
4 |
30000 |
0.6 |
6 |
40000 |
0.8 |
6 |
50000 |
1.0 |
8 |
65534 |
1.2 |
8 |
Alternative solutions
-
PHPOffice/PhpSpreadsheet
File formats supported: https://phpspreadsheet.readthedocs.io/en/latest/
-
box/spout
File formats supported: https://opensource.box.com/spout/