2021-05-29 20:21:45 +03:00
# SimpleXLSXGen
[<img src="https://img.shields.io/github/license/shuchkin/simplexlsxgen" /> ](https://github.com/shuchkin/simplexlsxgen/blob/master/license.md ) [<img src="https://img.shields.io/github/stars/shuchkin/simplexlsxgen" /> ](https://github.com/shuchkin/simplexlsxgen/stargazers ) [<img src="https://img.shields.io/github/forks/shuchkin/simplexlsxgen" /> ](https://github.com/shuchkin/simplexlsxgen/network ) [<img src="https://img.shields.io/github/issues/shuchkin/simplexlsxgen" /> ](https://github.com/shuchkin/simplexlsxgen/issues )
2020-05-19 23:46:52 +03:00
2022-02-05 15:32:10 +03:00
Export data to Excel XLSX file. PHP XLSX generator. No external tools and libraries.
- XLSX reader [here ](https://github.com/shuchkin/simplexlsx )
- XLS reader [here ](https://github.com/shuchkin/simplexls )
- CSV reader/writer [here ](https://github.com/shuchkin/simplecsv )
2020-05-19 23:46:52 +03:00
2022-05-17 09:03:35 +03:00
**Sergey Shuchkin** < sergey.shuchkin @ gmail . com > 2020-2022< br / >
2020-05-19 23:46:52 +03:00
2021-05-29 20:21:45 +03:00
*Hey, bro, please ★ the package for my motivation :) and [donate ](https://opencollective.com/simplexlsx ) for more motivation!*
2020-05-19 23:46:52 +03:00
## Basic Usage
```php
$books = [
['ISBN', 'title', 'author', 'publisher', 'ctry' ],
[618260307, 'The Hobbit', 'J. R. R. Tolkien', 'Houghton Mifflin', 'USA'],
[908606664, 'Slinky Malinki', 'Lynley Dodd', 'Mallinson Rendel', 'NZ']
];
2022-02-05 15:32:10 +03:00
$xlsx = Shuchkin\SimpleXLSXGen::fromArray( $books );
2021-02-28 21:09:42 +03:00
$xlsx->saveAs('books.xlsx'); // or downloadAs('books.xlsx') or $xlsx_content = (string) $xlsx
2020-05-19 23:46:52 +03:00
```
![XLSX screenshot ](books.png )
## Installation
The recommended way to install this library is [through Composer ](https://getcomposer.org ).
[New to Composer? ](https://getcomposer.org/doc/00-intro.md )
This will install the latest supported version:
```bash
$ composer require shuchkin/simplexlsxgen
```
or download class [here ](https://github.com/shuchkin/simplexlsxgen/blob/master/src/SimpleXLSXGen.php )
## Examples
### Data types
```php
$data = [
['Integer', 123],
['Float', 12.35],
2021-02-26 09:55:41 +03:00
['Percent', '12%'],
2020-05-19 23:46:52 +03:00
['Datetime', '2020-05-20 02:38:00'],
2020-07-29 18:50:38 +03:00
['Date','2020-05-20'],
2020-10-04 13:08:12 +03:00
['Time','02:38:00'],
2021-02-26 18:39:13 +03:00
['Datetime PHP', new DateTime('2021-02-06 21:07:00')],
2020-10-16 22:13:17 +03:00
['String', 'Long UTF-8 String in autoresized column'],
2021-05-03 00:22:26 +03:00
['Hyperlink', 'https://github.com/shuchkin/simplexlsxgen'],
['Hyperlink + Anchor', '< a href = "https://github.com/shuchkin/simplexlsxgen" > SimpleXLSXGen< / a > '],
2021-02-26 18:39:13 +03:00
['RAW string', "\0".'2020-10-04 16:02:00']
2020-05-19 23:46:52 +03:00
];
2022-02-05 15:32:10 +03:00
Shuchkin\SimpleXLSXGen::fromArray( $data )->saveAs('datatypes.xlsx');
2020-05-19 23:46:52 +03:00
```
![XLSX screenshot ](datatypes.png )
2021-05-14 13:52:30 +03:00
2021-05-03 00:08:41 +03:00
### Formatting
```php
$data = [
2021-05-03 00:22:26 +03:00
['Normal', '12345.67'],
['Bold', '< b > 12345.67< / b > '],
['Italic', '< i > 12345.67< / i > '],
['Underline', '< u > 12345.67< / u > '],
['Strike', '< s > 12345.67< / s > '],
['Bold + Italic', '< b > < i > 12345.67< / i > < / b > '],
['Hyperlink', 'https://github.com/shuchkin/simplexlsxgen'],
['Italic + Hyperlink + Anchor', '< i > < a href = "https://github.com/shuchkin/simplexlsxgen" > SimpleXLSXGen< / a > < / i > '],
2022-04-24 11:59:15 +03:00
['Green', '< style color = "#00FF00" > 12345 . 67 < / style > '],
['Bold Red Text', '< b > < style color = "#FF0000" > 12345 . 67 < / style > < / b > '],
['Blue Text and Yellow Fill', '< style bgcolor = "#FFFF00" color = "#0000FF" > 12345 . 67 < / style > '],
2021-05-03 00:22:26 +03:00
['Left', '< left > 12345.67< / left > '],
['Center', '< center > 12345.67< / center > '],
['Right', '< right > Right Text< / right > '],
2022-03-15 18:47:33 +03:00
['Center + Bold', '< center > < b > Name< / b > < / center > '],
2022-05-17 09:03:35 +03:00
['Row height', '< style height = "50" > Row Height = 50 < / style > '],
['Top', '< style height = "50" > < top > Top < / top > < / style > '],
['Middle + Center', '< style height = "50" > < middle > < center > Middle + Center < / center > < / middle > < / style > '],
['Bottom + Right', '< style height = "50" > < bottom > < right > Bottom + Right < / right > < / bottom > < / style > '],
2022-06-01 09:54:28 +03:00
['< center > MERGE CELLS MERGE CELLS MERGE CELLS MERGE CELLS MERGE CELLS< / center > ', null],
2022-07-05 08:19:42 +03:00
['< top > Word wrap< / top > ', "< wraptext > Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book< / wraptext > "]
2021-05-03 00:08:41 +03:00
];
2022-04-24 11:59:15 +03:00
SimpleXLSXGen::fromArray( $data )
2021-05-03 00:22:26 +03:00
->setDefaultFont( 'Courier New' )
->setDefaultFontSize( 14 )
2022-06-10 09:07:39 +03:00
->setColWidth(1, 35) // 1 - num column, 35 - size in chars
2022-05-17 09:03:35 +03:00
->mergeCells('A20:B20')
2021-05-03 00:22:26 +03:00
->saveAs('styles_and_tags.xlsx');
2021-05-03 00:08:41 +03:00
```
![XLSX screenshot ](styles.png )
2021-05-14 13:52:30 +03:00
### More examples
```php
// Fluid interface, output to browser for download
2022-02-05 15:32:10 +03:00
Shuchkin\SimpleXLSXGen::fromArray( $books )->downloadAs('table.xlsx');
2021-05-14 13:52:30 +03:00
// Fluid interface, multiple sheets
2022-02-05 15:32:10 +03:00
Shuchkin\SimpleXLSXGen::fromArray( $books )->addSheet( $books2 )->download();
2021-05-14 13:52:30 +03:00
// Alternative interface, sheet name, get xlsx content
2022-02-05 15:32:10 +03:00
$xlsx_cache = (string) (new Shuchkin\SimpleXLSXGen)->addSheet( $books, 'Modern style');
2021-05-14 13:52:30 +03:00
2021-05-19 07:21:09 +03:00
// Classic interface
2022-02-05 15:32:10 +03:00
use Shuchkin\SimpleXLSXGen
2021-05-14 13:52:30 +03:00
$xlsx = new SimpleXLSXGen();
$xlsx->addSheet( $books, 'Catalog 2021' );
$xlsx->addSheet( $books2, 'Stephen King catalog');
$xlsx->downloadAs('books_2021.xlsx');
exit();
```
2022-06-10 09:07:39 +03:00
### JS array to Excel (AJAX)
```php
< ?php // array2excel.php
if (isset($_POST['array2excel'])) {
require __DIR__ .'/simplexlsxgen/src/SimpleXLSXGen.php';
$data = json_decode($_POST['array2excel'], false);
\Shuchkin\SimpleXLSXGen::fromArray($data)->downloadAs('file.xlsx');
return;
}
?>
< html lang = "en" >
< head >
< title > JS array to Excel< / title >
< / head >
< script >
function array2excel() {
var books = [
["ISBN", "title", "author", "publisher", "ctry"],
[618260307, "The Hobbit", "J. R. R. Tolkien", "Houghton Mifflin", "USA"],
[908606664, "Slinky Malinki", "Lynley Dodd", "Mallinson Rendel", "NZ"]
];
var json = JSON.stringify(books);
var request = new XMLHttpRequest();
request.onreadystatechange = function () {
if (this.readyState === 4) {
if (this.status === 200) {
var file = new Blob([this.response], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"});
var fileURL = URL.createObjectURL(file);
window.open(fileURL);
} else {
alert("Error: " + this.status + " " + this.statusText);
}
}
}
request.open('POST', "array2excel.php");
request.responseType = "blob";
request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
request.send("array2excel=" + encodeURIComponent(json));
}
< / script >
< body >
< input type = "button" onclick = "array2excel()" value = "array2excel" / >
< / body >
< / html >
```
2021-05-14 13:52:30 +03:00
2021-05-19 07:21:09 +03:00
## Debug
2020-07-14 12:24:51 +03:00
```php
ini_set('error_reporting', E_ALL );
ini_set('display_errors', 1 );
$data = [
['Debug', 123]
2021-11-28 16:48:15 +03:00
];
2022-02-05 15:32:10 +03:00
Shuchkin\SimpleXLSXGen::fromArray( $data )->saveAs('debug.xlsx');
2021-11-28 16:48:15 +03:00
```