PHPackages                             avadim/fast-excel-templator - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [PDF &amp; Document Generation](/categories/documents)
4. /
5. avadim/fast-excel-templator

ActiveLibrary[PDF &amp; Document Generation](/categories/documents)

avadim/fast-excel-templator
===========================

Lightweight and very fast Excel Spreadsheet generator from XLSX-templates in PHP

v2.4.0(3mo ago)20106.6k↑10.7%1[2 issues](https://github.com/aVadim483/fast-excel-templator/issues)MITPHPPHP &gt;=7.4

Since Oct 25Pushed 3mo ago2 watchersCompare

[ Source](https://github.com/aVadim483/fast-excel-templator)[ Packagist](https://packagist.org/packages/avadim/fast-excel-templator)[ Docs](https://github.com/aVadim483/fast-excel-templator)[ RSS](/packages/avadim-fast-excel-templator/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (10)Dependencies (4)Versions (16)Used By (0)

FastExcelTemplator
==================

[](#fastexceltemplator)

**FastExcelTemplator** is a part of the **FastExcelPhp Project** which consists of

- [FastExcelWriter](https://packagist.org/packages/avadim/fast-excel-writer) - to create Excel spreadsheets
- [FastExcelReader](https://packagist.org/packages/avadim/fast-excel-reader) - to reader Excel spreadsheets
- [FastExcelTemplator](https://packagist.org/packages/avadim/fast-excel-templator) - to generate Excel spreadsheets from XLSX templates
- [FastExcelLaravel](https://packagist.org/packages/avadim/fast-excel-laravel) - special **Laravel** edition

Introduction
------------

[](#introduction)

**FastExcelTemplator** can generate Excel-compatible spreadsheets in XLSX format (Office 2007+) from XLSX templates, very quickly and with minimal memory usage. This library is designed to be lightweight, super-fast and requires minimal memory usage.

**Features**

- Supports XLSX format only (Office 2007+) with multiple worksheets
- Transfers from templates to target spreadsheets styles, images, notes
- Replaces the entire cell values and substrings
- You can use any row from a template as row template to insert and replace a row with new values
- The library can read styling options of cells - formatting patterns, colors, borders, fonts, etc.

Installation
------------

[](#installation)

Use `composer` to install **FastExcelTemplator** into your project:

```
composer require avadim/fast-excel-templator

```

Templates Usage
---------------

[](#templates-usage)

Example of template

[![demo1-tpl.png](demo2-tpl.jpg)](demo2-tpl.jpg)

From this template you can get a file like this

[![demo1-out.png](demo2-out.jpg)](demo2-out.jpg)

**Step 1** - open template and set replacements

```
// Open template and set output file
$excel = Excel::template($tpl, $out);
// Get the first sheet
$sheet = $excel->sheet();

$fillData = [
    '{{COMPANY}}' => 'Comp Stock Shop',
    '{{ADDRESS}}' => '123 ABC Street',
    '{{CITY}}' => 'Peace City, TN',
];

// Set replacements of entire cell values for the sheet
// If the value is '{{COMPANY}}', then this value will be replaced,
// but if the value 'Company Name {{COMPANY}}', then this value will not be replaced
$sheet->fill($fillData);

// Set replacements of any occurring substrings
// If the value is '{{DATE}}' or 'Date: {{DATE}}', then substring '{{DATE}}' will be replaced,
$replaceData = ['{{BULK_QTY}}' => 12, '{{DATE}}' => date('m/d/Y')];
$sheet->replace($fillData);
```

**Step 2** - transfer the top of the sheet and the table headers from the template to the output file

```
// Transfer rows 1-6 from templates to output file
$sheet->transferRowsUntil(6);
```

There are 6 rows read from template, the output file also contains 6 lines

[![demo1-out.png](demo2-1.jpg)](demo2-1.jpg)

**Step 3** - insert inner table rows

```
// Get the row number 7 as a template and go to the next row in the template
$rowTemplate = $sheet->getRowTemplate(7);

// Fill row template and insert it into the output
foreach ($allData as $record) {
    $rowData = [
        // In the column A wil be written value from field 'number'
        'A' => $record['number'],
        // In the column B wil be written value from field 'description'
        'B' => $record['description'],
        // And so on...
        'C' => $record['price1'],
        'D' => $record['price2'],
    ];
    $sheet->insertRow($rowTemplate, $rowData);
}
```

We filled in and inserted rows 7, 8 and 9

[![demo1-out.png](demo2-2.jpg)](demo2-2.jpg)

**Step 4** - Now transfer the remaining rows and save file

```
// Method transferRows() without arguments transfers remaining rows from the template to the output file
$sheet->transferRows();

// ...
// Save new file
$excel->save();
```

[![demo1-out.png](demo2-3.jpg)](demo2-3.jpg)

You can find code examples in */demo* folder

Modification of Spreadsheets
----------------------------

[](#modification-of-spreadsheets)

Use the `row()` method to read rows, modify them using callback, and write them to the output file.

```
use avadim\FastExcelTemplator\Excel;

$excel = Excel::template($tpl, $out);
$sheet = $excel->sheet();

$sheet->rows(function ($sourceRowNum, $targetRowNum, $rowData) {
    // $rowData is an instance of the RowTemplate

    // skip the first row
    if ($sourceRowNum === 1) {
        return null;
    }
    // $rowData
    // if a value of cell 'A' then break
    if ($rowData->getValue('A') > 5) {
        return false;
    }
    // write value to cell 'B'; if the cell 'B' does not exist, it will be created
    $rowData->setValue('B', $rowData->getValue('A') * 2);
    // return modified row
    return $rowData;
});
$excel->save();
```

You can add one or more cells to the end of a row in the callback function. The styles and value from the source cell will be copied to the new cell. If you do not explicitly specify a source cell, the last cell in the row will be used as the source.

```
$sheet->rows(function ($sourceRowNum, $targetRowNum, $rowData) {
    // Clone the last cell of the row and add them to the end of the row and assign it the value 123
    $rowData->appendCell()->withValue(123);

    return $rowData;
});

$sheet->rows(function ($sourceRowNum, $targetRowNum, $rowData) {
    // Clone the cell 'B' and add them to the end
    $rowData->appendCell('B');

    // Clone the last cell three times
    $rowData->appendCell(null, 3)->withValues([111, 222, 333]);

    return $rowData;
});
```

Also, you can clone any cell (with styles and value) to other cell

```
$sheet->rows(function ($sourceRowNum, $targetRowNum, $rowData) {
    // Clone the cell 'A' to the cell 'E' and assign it the SUM()
    $rowData->cloneCell('A', 'E')
        ->withValues(['=SUM(A' . $targetRowNum . ':E' . $targetRowNum . ')']);

    return $rowData;
});
```

If you need to remove cells, use the `removeCells()`.

```
$sheet->rows(function ($sourceRowNum, $targetRowNum, $rowData) {
    // Clone the cell 'A' to the cell 'E' and assign it the SUM()
    $rowData->removeCells(['B', 'D']);

    return $rowData;
});
```

List of Functions
-----------------

[](#list-of-functions)

- [Class Excel](docs/91-api-class-excel.md)
- [Class Sheet](docs/92-api-class-sheet-template.md)
- [Class RowTemplate](docs/93-api-class-row-template.md)

Do you like FastExcelTemplator?
-------------------------------

[](#do-you-like-fastexceltemplator)

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

###  Health Score

48

—

FairBetter than 95% of packages

Maintenance76

Regular maintenance activity

Popularity41

Moderate usage in the ecosystem

Community9

Small or concentrated contributor base

Maturity50

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~68 days

Recently: every ~146 days

Total

13

Last Release

114d ago

Major Versions

v1.0.5 → v2.x-dev2024-04-10

PHP version history (2 changes)v1.0.0PHP ^7.4||^8.1

v2.x-devPHP &gt;=7.4

### Community

Maintainers

![](https://www.gravatar.com/avatar/bdb51a3c707497a4cc826ec61af31a3f33f2a372d8245e1d17a51be913d1c916?d=identicon)[avadim](/maintainers/avadim)

---

Top Contributors

[![aVadim483](https://avatars.githubusercontent.com/u/2246758?v=4)](https://github.com/aVadim483 "aVadim483 (38 commits)")

---

Tags

excelphpphpexcelspreadsheetsphplibraryexcelxlsxlsxspreadsheetPHPExcelMS Officeoffice 2007

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/avadim-fast-excel-templator/health.svg)

```
[![Health](https://phpackages.com/badges/avadim-fast-excel-templator/health.svg)](https://phpackages.com/packages/avadim-fast-excel-templator)
```

###  Alternatives

[avadim/fast-excel-writer

Lightweight and very fast XLSX Excel Spreadsheet Writer in PHP

2951.2M7](/packages/avadim-fast-excel-writer)[avadim/fast-excel-reader

Lightweight and very fast XLSX Excel Spreadsheet Reader in PHP

104608.4k6](/packages/avadim-fast-excel-reader)[avadim/fast-excel-laravel

Lightweight and very fast XLSX Excel Spreadsheet Export/Import for Laravel

4146.7k1](/packages/avadim-fast-excel-laravel)[onurb/excel-bundle

Symfony Bundle to read or write Excel file (including pdf, xlsx, odt), using phpoffice/phpspreadsheet library (replacement of phpoffice/phpexcel, abandonned)

15332.0k](/packages/onurb-excel-bundle)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
