pear/spreadsheet_excel_writer

Allows writing of Excel spreadsheets without the need for COM objects. Supports formulas, images (BMP) and all kinds of formatting for text and cells.

v0.9.7 2021-01-01 11:29 UTC

This package is auto-updated.

Last update: 2024-04-10 12:29:01 UTC


README

Build Status Latest Stable Version Coverage Status

Spreadsheet_Excel_Writer

This package is Spreadsheet_Excel_Writer and has been migrated from svn.php.net.

Please report all new issues via the PEAR bug tracker.

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.

Installation

Pear

To test, run

$ phpunit

To build, simply

$ pear package

To install from scratch

$ pear install package.xml

To upgrade

$ pear upgrade -f package.xml

Composer

This package comes with support for Composer.

To install from Composer

$ composer require pear/spreadsheet_excel_writer

To install the latest development version

$ 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)

Some important limitations:

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")

Correct output only guaranteed with mbstring.func_overload = 0 otherwise, you should use workround mb_internal_encoding('latin1');

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();

Format usage

$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);

Header usage (Sending HTTP header for download dialog)

$xls = new Spreadsheet_Excel_Writer();
$xls->send('excel_'.date("Y-m-d__H:i:s").'.xls');

Performance

Platform:
Intel(R) Core(TM) i5-4670 CPU @ 3.40GHz
PHP 7.4

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

Estimated performance:

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