PHPackages                             samagtech/excel-lib - 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. [Utility &amp; Helpers](/categories/utility)
4. /
5. samagtech/excel-lib

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

samagtech/excel-lib
===================

v1.3.2(2y ago)06.3k11MITPHP

Since Sep 20Pushed 2y ago1 watchersCompare

[ Source](https://github.com/Samag-Tech/excel-lib)[ Packagist](https://packagist.org/packages/samagtech/excel-lib)[ RSS](/packages/samagtech-excel-lib/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (3)Dependencies (2)Versions (9)Used By (1)

Libreria per la gestione degli Excel
====================================

[](#libreria-per-la-gestione-degli-excel)

Prefazione
----------

[](#prefazione)

Questa libreria è un wrapper per la libreria [PHPSpreadSheet](https://phpspreadsheet.readthedocs.io/en/latest/), una versione avanzata di PHPExcel che non ha problemi con versioni PHP 7.4+ ed è possibile installarla con

```
composer require samagtech/excel-lib
```

In caso di modifiche alla libreria e/o aggiunta di funzionalità consigliato lanciare/scrivere gli UnitTest per controllare l'integrità delle funzioni utilizzando il comando

```
composer test
```

Per installare PHPUnit ([docs](https://phpunit.readthedocs.io/en/9.5/)) lanciare il comando

```
composer install --dev
```

Inoltre per gestire gli errori della libreria deve essere gestita l'eccezione *ExcelException*

Creazione di un foglio Excel
----------------------------

[](#creazione-di-un-foglio-excel)

Per creare un Excel bisogna instanziare un oggetto *Writer* in questo modo:

```
    $writer = new \SamagTech\ExcelLib\Writer($path);
```

oppure

```
    $writer = (new \SamagTech\ExcelLib\Factory())->createWriter($path);
```

Il *Writer* ha bisogno del *path* dove verranno salvati i file ma accetta anche il nome del file e la lista delle colonne da ignorare la formattazione. Esempio di creazione

```
    use SamagTech\ExcelLib\Writer;

    $writer = new Writer($path, $filename, $ignoreFieldsFormat);

    or

    $writer = new Writer($path, ignoreFieldsFormat: $ignoreFieldsFormat);

    or

    $writer = new Writer($path);
    $writer->setFilename($filename)->setIgnoreFieldsFormat($ignoreFieldsFormat);
```

è possibile cambiare anche il path a runtime

```
    $writer->setPath($path);
```

### Utilizzo del Writer

[](#utilizzo-del-writer)

Esempio di utilizzo base

```
    $filePath = $writer->setHeader($headers)->setBody($body)->build();
```

La funzione *setHeader()* imposta l'intestazione dei fogli ed è facoltativa, la funzione *setBody()* setta i dati da inserire nel foglio e la funzione *build()* costruisce il foglio e restituisce il path con il nome del file.

### Definizione formattazione colonne

[](#definizione-formattazione-colonne)

Utilizzando la funzione *setColumnDefinition(array $columnDefinition)* è possibile definire la formattazione delle colonne con un array dove la chiave è la chiave della colonna e il valore la tipologia di formattazione.

```
    $columnDefinition = [
        'name'          => 'string',
        'age'           =>  'number',
        'perc_fat'      =>  'percentage'
    ];
```

**NB. Per ora sono gestiti sono number, string e percentage, di default vengono applicate solo le logiche di stringa e numero(i numeri vengono automaticamente formattati all'italiana X.XXX,XX e in rosso se negativi)**

### Costruzioni di Excel con fogli multipli

[](#costruzioni-di-excel-con-fogli-multipli)

È possibile costruire file Excel con fogli multipli utilizzando sempre il metodo *build()* passandogli il parametro *true*, automaticamente verrà gestito il corpo come foglio multiplo. Esempio di costruzione di foglio multiplo

```
    $body = [
        // Foglio 1
        'sheet_1' => [
            // Riga 1
            [
                // Dati
            ],
            // Riga 2
            [
                // Dati
            ]
        ],
        // Foglio 2
        'sheet_2' => [
            // Riga 1
            [
                // Dati
            ],
            // Riga 2
            [
                // Dati
            ]
        ]
    ];

    $filePath = $writer->setBody($body)->build(true);
```

Riguardo all'intestazione (sempre opzionale)

```
    $header = [
        // Intestazione foglio 1
        [
            // Stringhe che diverranno colonne
        ],
        // Intestazione foglio 2
        [
            // Stringhe che diverranno colonne
        ]
    ]

    or

    // In questo caso non essendo diviso l'intestazione verrà duplicata per ogni foglio
    $header = [
        // Stringhe che diverranno colonne
    ]
```

Lettura di un foglio Excel
--------------------------

[](#lettura-di-un-foglio-excel)

Per leggere un Excel bisogna instanziare un oggetto *Reader* in questo modo:

```
    $reader = new \SamagTech\ExcelLib\Reader($path, $filename);
```

oppure

```
    $reader = (new \SamagTech\ExcelLib\Factory())->createReader($path, $filename);
```

Il *Reader* ha bisogno del *path* e del *filename* per caricare il file. Il nome del file ed il path possono essere cambiati a runtime

```
    $reader->setPath($path)

    or

    $reader->setFilename($filename)
```

### Utilizzo del Reader

[](#utilizzo-del-reader)

Esempio di utilizzo base

```
    $array = $reader->toArray();

    or

    $object = $reader->toObject();
```

È quindi possibile trasformare l'Excel in oggetto o array. Se il file che si sta caricando ha più di un foglio allora vengono caricati i fogli in questo modo

```
    // Excel con foglio 1 e 2

    $array = $reader->toArray();

    // L'array sarà strutturato con il nome dei fogli dove gli spazi verranno modificati in underscore

    /**
     * $array = [
     *  'Foglio_1' => [
     *      [
     *          // Riga 1
     *      ],
     *      [
     *          // Riga 2
     *      ]
     *  ],
     *  'Foglio_2'   =>  [
     *      [
     *         // Riga 1
     *      ],
     *      [
     *          // Riga 2
     *      ]
     * ]
     *
     *
     * /
```

### Definzione custom delle chiavi in base alle colonne

[](#definzione-custom-delle-chiavi-in-base-alle-colonne)

È possibile dare una definizione custom per tradurre le colonne e con chiavi custom

```
    $customColumnToKey = [
        'Nome'      => 'firstname',
        'Cognome'   => 'lastname',
        'Età'       =>  'age'
    ]

    $data = $reader->setColumnToKey($customColumnToKey)->toArray();

    /**
     * Es. Excel
     *
     * Nome         | Cognome   |   Età
     * Alessandro   | Marotta   |   25
     *
     * $data = [
     *      [
     *          'firstname' => 'Alessandro',
     *          'lastname' => 'Marotta',
     *          'age' => 25,
     *      ],
     *      // Altre righe
     * ]
     *
     * /
```

**NB. In questo caso vengono scartate le colonne non definite. È necessaria l'intestazione delle colonne nel foglio.**

### Lettura di fogli specifici

[](#lettura-di-fogli-specifici)

È possibile indicare implicitamente i fogli da caricare

```
    $sheetNames = 'Foglio 1'; // or $sheetNames = ['Foglio 1', 'Foglio 2']

    $reader->setSheetNames($sheetNames)->toArray();
```

### Indicare che il foglio non ha intestazione

[](#indicare-che-il-foglio-non-ha-intestazione)

È possibile che i fogli non abbiano un intestazione quindi è opportuno indicarlo

```
    $reader->setHasHeader(false)->toArray();
```

### Funzioni utili - Reader

[](#funzioni-utili---reader)

*getNumSheet()* - Restituisce il numero di fogli effettivi caricati

###  Health Score

30

—

LowBetter than 64% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity19

Limited adoption so far

Community14

Small or concentrated contributor base

Maturity56

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 76.9% 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 ~90 days

Recently: every ~109 days

Total

8

Last Release

1071d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/158c3d2aab3165bb6a8d0108fbed37794594cc2bf68842884c960f3fa698b6fd?d=identicon)[samag-tech](/maintainers/samag-tech)

---

Top Contributors

[![alexmartech](https://avatars.githubusercontent.com/u/68732992?v=4)](https://github.com/alexmartech "alexmartech (10 commits)")[![biancoenrico](https://avatars.githubusercontent.com/u/74348954?v=4)](https://github.com/biancoenrico "biancoenrico (2 commits)")[![WedeaDigitalSRL](https://avatars.githubusercontent.com/u/68433031?v=4)](https://github.com/WedeaDigitalSRL "WedeaDigitalSRL (1 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/samagtech-excel-lib/health.svg)

```
[![Health](https://phpackages.com/badges/samagtech-excel-lib/health.svg)](https://phpackages.com/packages/samagtech-excel-lib)
```

###  Alternatives

[civicrm/civicrm-core

Open source constituent relationship management for non-profits, NGOs and advocacy organizations.

728272.9k20](/packages/civicrm-civicrm-core)[in2code/powermail

Powermail is a well-known, editor-friendly, powerful and easy to use mailform extension for TYPO3 with a lots of features

982.5M38](/packages/in2code-powermail)[blair2004/nexopos

The Free Modern Point Of Sale System build with Laravel, TailwindCSS and Vue.js.

1.2k2.3k](/packages/blair2004-nexopos)[solspace/craft-freeform

The most flexible and user-friendly form building plugin!

52664.9k12](/packages/solspace-craft-freeform)[pimcore/data-importer

Adds a comprehensive import functionality to Pimcore Datahub

44763.4k2](/packages/pimcore-data-importer)[portphp/spreadsheet

PhpSpreadsheet reader and writer for Port

14796.4k4](/packages/portphp-spreadsheet)

PHPackages © 2026

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