Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/shuchkin/simplexlsxgen
Export data to Excel. PHP XLSX generator
https://github.com/shuchkin/simplexlsxgen
php xlsx xlsxwriter
Last synced: 3 days ago
JSON representation
Export data to Excel. PHP XLSX generator
- Host: GitHub
- URL: https://github.com/shuchkin/simplexlsxgen
- Owner: shuchkin
- License: mit
- Created: 2020-05-19T20:03:00.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-10-13T11:38:22.000Z (4 months ago)
- Last Synced: 2024-10-29T18:49:34.275Z (3 months ago)
- Topics: php, xlsx, xlsxwriter
- Language: PHP
- Homepage:
- Size: 1.5 MB
- Stars: 990
- Watchers: 22
- Forks: 201
- Open Issues: 22
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: license.md
Awesome Lists containing this project
README
# SimpleXLSXGen
[](https://github.com/shuchkin/simplexlsxgen/blob/master/license.md) [](https://github.com/shuchkin/simplexlsxgen/stargazers) [](https://github.com/shuchkin/simplexlsxgen/network) [](https://github.com/shuchkin/simplexlsxgen/issues)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)**Sergey Shuchkin** 2020-2024
*Hey, bro, please ★ the package for my motivation :) and [donate](https://opencollective.com/simplexlsx) for more motivation!*
## 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']
];
$xlsx = Shuchkin\SimpleXLSXGen::fromArray( $books );
$xlsx->saveAs('books.xlsx'); // or downloadAs('books.xlsx') or $xlsx_content = (string) $xlsx
```
![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
Use UTF-8 encoded strings.
### Data types
```php
$data = [
['Integer', 123],
['Float', 12.35],
['Percent', '12%'],
['Currency $', '$500.67'],
['Currency €', '200 €'],
['Currency ₽', '1200.30 ₽'],
['Currency (other)', '500'],
['Currency Float (other)', '500.250'],
['Datetime', '2020-05-20 02:38:00'],
['Date', '2020-05-20'],
['Time', '02:38:00'],
['Datetime PHP', new DateTime('2021-02-06 21:07:00')],
['String', 'Very long UTF-8 string in autoresized column'],
['Formula', 'SUM(B1:B2)'],
['Hyperlink', 'https://github.com/shuchkin/simplexlsxgen'],
['Hyperlink + Anchor', 'SimpleXLSXGen'],
['Internal link', 'Go to second page'],
['RAW string', "\0" . '2020-10-04 16:02:00'],
['Formatted RAW string', '2024-07-28 16:02:00'],
];
SimpleXLSXGen::fromArray($data)->saveAs('datatypes.xlsx');
```
![XLSX screenshot](datatypes.png)### Formatting
```php
$data = [
['Normal', '12345.67'],
['Bold', '12345.67'],
['Italic', '12345.67'],
['Underline', '12345.67'],
['Strike', '12345.67'],
['Bold + Italic', '12345.67'],
['Hyperlink', 'https://github.com/shuchkin/simplexlsxgen'],
['Italic + Hyperlink + Anchor', 'SimpleXLSXGen'],
['Green', '12345.67'],
['Bold Red Text', '12345.67'],
['Size 32 Font', 'Big Text'],
['Blue Text and Yellow Fill', '12345.67'],
['Border color', 'Black Thin Border'],
['Border style','<wraptext>none, thin, medium, dashed, dotted, thick, double, hair, mediumDashed, dashDot,mediumDashDot, dashDotDot, mediumDashDotDot, slantDashDot</wraptext>'],
['Border sides', 'Top No + Right Dotted + Bottom medium + Left double'],
['Left', '12345.67'],
['Center', '12345.67'],
['Right', 'Right Text'],
['Center + Bold', 'Name'],
['Row height', 'Row Height = 50'],
['Top', '<top>Top</top>'],
['Middle + Center', '<middle><center>Middle + Center</center></middle>'],
['Bottom + Right', '<bottom><right>Bottom + Right</right></bottom>'],
['MERGE CELLS MERGE CELLS MERGE CELLS MERGE CELLS MERGE CELLS', null],
['Word wrap', "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"],
['Linebreaks', "Line 1\nLine 2\nLine 3"]
];
SimpleXLSXGen::fromArray($data)
->setDefaultFont('Courier New')
->setDefaultFontSize(14)
->setColWidth(1, 35)
->mergeCells('A20:B20')
->saveAs('styles_and_tags.xlsx');
```
![XLSX screenshot](styles.png)### RAW Strings
Prefix #0 cell value (use double quotes) or use ::raw() method, or tag ``````
```php
$PushkinDOB = '1799-07-06';
$data = [
['Datetime as raw string', "\0".'2023-01-09 11:16:34'],
['Date as raw string', "\0".$PushkinDOB],
['Disable type detection', "\0".'+12345'],
['Insert greater/less them simbols', SimpleXLSXGen::raw('20- short term: <6 month')],
['Formatted raw', '+123456 <tag>'],
];
SimpleXLSXGen::fromArray($data)
->saveAs('test_rawstrings.xlsx');
```
### More examples
```php
// Fluid interface, output to browser for download
Shuchkin\SimpleXLSXGen::fromArray( $books )->downloadAs('table.xlsx');// Fluid interface, multiple sheets
Shuchkin\SimpleXLSXGen::fromArray( $books, 'My books' )->addSheet( $books2 )->download();// Alternative interface, sheet name, get xlsx content
$xlsx_cache = (string) (new Shuchkin\SimpleXLSXGen)->addSheet( $books, 'Modern style');// Classic interface
use Shuchkin\SimpleXLSXGen;
$xlsx = new SimpleXLSXGen();
$xlsx->addSheet( $books, 'Catalog 2021' );
$xlsx->addSheet( $books2, 'Stephen King catalog');
$xlsx->downloadAs('books_2021.xlsx');
exit();// Empty book with title
$xlsx = SimpleXLSX::create('My books');
$xlsx->addSheet( $books );
$xlsx->save(); // ./My books.xlsx// Hyperlinks
$xlsx = SimpleXLSX::fromArray([
['internal link', 'Go to second sheet'],
['http', 'https://example.com/'], // autodetect
['http + hash', 'https://en.wikipedia.org/wiki/Office_Open_XML#References'], // autodetect
['external anchor', 'Open XML'],
['relative link', 'books'],
['relative link + cell addr', 'link to second sheet in other book'],
['mailto', '[email protected]'], // autodetect
['mailto 2', 'Please email me'],
])->addSheet([['Second sheet']], 'My books 2')->saveAs('hyperlinks.xlsx');// Autofilter
$xlsx->autoFilter('A1:B10');// Freeze rows and columns from top-left corner up to, but not including,
// the row and column of the indicated cell
$xlsx->freezePanes('B2'); // B1 - freeze first column, A2 - freeze top row// RTL mode
// Column A is on the far right, Column B is one column left of Column A, and so on.
// Also, information in cells is displayed in the Right to Left format.
$xlsx->rightToLeft();// Set Meta Data Files
// this data in propertis Files and Info file in Office
$xlsx->setAuthor('John Doe ')
->setCompany('JD LLC ')
->setManager('Jane Doe ')
->setLastModifiedBy("John Doe ")
->setTitle('My Books')
->setSubject('My bookshelf')
->setKeywords('Tolkien,Rowling,Kipling')
->setDescription('Cool books worn by time')
->setCategory('Books')
->setLanguage('en-US')
->setApplication('Shuchkin\SimpleXLSXGen')
```
### JS array to Excel (AJAX)
```php
downloadAs('file.xlsx');
return;
}
?>JS array to Excel
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.onload = function () {
if (this.status === 200) {
var file = new Blob([this.response], {type: this.getResponseHeader('Content-Type')});
var fileURL = URL.createObjectURL(file);
var filename = "", m;
var disposition = this.getResponseHeader('Content-Disposition');
if (disposition && (m = /"([^"]+)"/.exec(disposition)) !== null) {
filename = m[1];
}
var a = document.createElement("a");
if (typeof a.download === 'undefined') {
window.location = fileURL;
} else {
a.href = fileURL;
a.download = filename;
document.body.appendChild(a);
a.click();
}
} 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));
}```
## Debug
```php
ini_set('error_reporting', E_ALL );
ini_set('display_errors', 1 );$data = [
['Debug', 123]
];Shuchkin\SimpleXLSXGen::fromArray( $data )->saveAs('debug.xlsx');
```