avadim/fast-excel-writer

Lightweight and very fast XLSX Excel Spreadsheet Writer in PHP

Installs: 854 512

Dependents: 6

Suggesters: 0

Security: 0

Stars: 273

Watchers: 5

Forks: 40

Open Issues: 0

pkg:composer/avadim/fast-excel-writer


README

GitHub Release Packagist Downloads GitHub License Static Badge

FastExcelWriter Logo

fastest memory saving multiple worksheet
book and sheet protection multiple charts styling and image insertion

FastExcelWriter v.6

FastExcelWriter is a part of the FastExcelPhp Project which consists of

Introduction

Lightweight, powerful and very fast XLSX Spreadsheet Writer in pure PHP. This library is designed to be super-fast and requires minimal memory usage.

FastExcelWriter creates spreadsheets in XLSX format, compatible with MS Excel (Office 2007+), LibreOffice, OpenOffice and others, with many features supported:

  • Takes UTF-8 encoded input
  • Multiple worksheets
  • Supports currency/date/numeric cell formatting, formulas and active hyperlinks
  • Supports most styling options for cells, rows, columns - colors, borders, fonts, etc.
  • You can set the height of the rows and the width of the columns (including auto width calculation)
  • You can add formulas, notes and images in you XLSX-files
  • Supports workbook and sheet protection with/without passwords
  • Supports page settings - page margins, page size
  • Inserting multiple charts
  • Supports data validations and conditional formatting

PHP Version Support

Currently, the required PHP minimum version is PHP 7.4

Documentation

Read more in the documentation. Or check out the API reference. Also, you can see examples in /demo folder.

Changelog is here.

Installation

Use composer to install FastExcelWriter into your project:

composer require avadim/fast-excel-writer

Changes In Version 6

  • Data Validation support

Important changes in version 6.1

  • Sheet::setRowOptions(), Sheet::setColOptions(), Sheet::setRowStyles() and Sheet::setColStyles() are deprecated, instead of them you should use other functions: setRowStyle(), setRowStyleArray(), setRowDataStyle(), setRowDataStyleArray(), setColStyle(), setColStyleArray(), setColDataStyle(), setColDataStyleArray()
  • The behavior of the Sheet::setRowStyle() and Sheet::setColStyle() has changed, they now set styles for the entire row or column (even if they are empty)

Changes In Version 5

  • The general news is Chart support

Important changes in version 5.8

Before v.5.8

$sheet->writeCell(12345); // The number 12345 will be written into the cell
$sheet->writeCell('12345'); // The number 12345 will also be written here

In version 5.8 and later

$sheet->writeCell(12345); // The number 12345 will be written into the cell
$sheet->writeCell('12345'); // Here the string '12345' will be written into the cell

If you want to keep the previous behavior for backward compatibility, you should use option 'auto_convert_number' when creating a workbook.

$excel = Excel::create(['Sheet1'], ['auto_convert_number' => true]);
$sheet = $excel->sheet();
$sheet->writeCell('12345'); // String '12345' will be automatically converted to a number

Changes In Version 4

  • Now the library works even faster
  • Added a fluent interface for applying styles.
  • New methods and code refactoring

FastExcelWriter vs PhpSpreadsheet

PhpSpreadsheet is a perfect library with wonderful features for reading and writing many document formats. FastExcelWriter can only write and only in XLSX format, but does it very fast and with minimal memory usage.

FastExcelWriter:

  • 7-9 times faster
  • uses less memory by 8-10 times
  • supports writing huge 100K+ row spreadsheets

Benchmark of PhpSpreadsheet (generation without styles)

Rows x Cols Time Memory
1000 x 5 0.98 sec 2,048 Kb
1000 x 25 4.68 sec 14,336 Kb
5000 x 25 23.19 sec 77,824 Kb
10000 x 50 105.8 sec 256,000 Kb

Benchmark of FastExcelWriter (generation without styles)

Rows x Cols Time Memory
1000 x 5 0.19 sec 2,048 Kb
1000 x 25 1.36 sec 2,048 Kb
5000 x 25 3.61 sec 2,048 Kb
10000 x 50 13.02 sec 2,048 Kb

Do you want to support FastExcelWriter?

if you find this package useful you can support and donate to me for a cup of coffee:

  • USDT (TRC20) TSsUFvJehQBJCKeYgNNR1cpswY6JZnbZK7
  • USDT (ERC20) 0x5244519D65035aF868a010C2f68a086F473FC82b
  • ETH 0x5244519D65035aF868a010C2f68a086F473FC82b

Or just give me a star on GitHub :)