shuchkin/simplexlsx
Composer 安装命令:
composer require shuchkin/simplexlsx
包简介
Parse and retrieve data from Excel XLSx files. MS Excel 2007 workbooks PHP reader.
README 文档
README
Parse and retrieve data from Excel XLSx files. MS Excel 2007 workbooks PHP reader. No addiditional extensions need (internal unzip + standart SimpleXML parser).
See also:
SimpleXLS old format MS Excel 97 php reader.
SimpleXLSXGen xlsx php writer.
Hey, bro, please ★ the package for my motivation :) and donate for more motivation!
Sergey Shuchkin sergey.shuchkin@gmail.com
Basic Usage
use Shuchkin\SimpleXLSX; if ( $xlsx = SimpleXLSX::parse('book.xlsx') ) { print_r( $xlsx->rows() ); } else { echo SimpleXLSX::parseError(); }
Array
(
[0] => Array
(
[0] => ISBN
[1] => title
[2] => author
[3] => publisher
[4] => ctry
)
[1] => Array
(
[0] => 618260307
[1] => The Hobbit
[2] => J. R. R. Tolkien
[3] => Houghton Mifflin
[4] => USA
)
)
Installation
The recommended way to install this library is through Composer. New to Composer?
This will install the latest supported version:
$ composer require shuchkin/simplexlsx
or download PHP 5.5+ class here
Basic methods
// open
SimpleXLSX::parse( $filename, $is_data = false, $debug = false ): SimpleXLSX (or false)
SimpleXLSX::parseFile( $filename, $debug = false ): SimpleXLSX (or false)
SimpleXLSX::parseData( $data, $debug = false ): SimpleXLSX (or false)
// simple
$xlsx->rows($worksheetIndex = 0, $limit = 0): array
$xlsx->readRows($worksheetIndex = 0, $limit = 0): Generator - helps read huge xlsx
$xlsx->toHTML($worksheetIndex = 0, $limit = 0): string
// extended
$xlsx->rowsEx($worksheetIndex = 0, $limit = 0): array
$xlsx->readRowsEx($worksheetIndex = 0, $limit = 0): Generator - helps read huge xlsx with styles
$xlsx->toHTMLEx($worksheetIndex = 0, $limit = 0): string
// meta
$xlsx->dimension($worksheetIndex):array [num_cols, num_rows]
$xlsx->sheetsCount():int
$xlsx->sheetNames():array
$xlsx->sheetName($worksheetIndex):string
$xlsx->sheetMeta($worksheetIndex = null):array sheets metadata (null = all sheets)
$xlsx->isHiddenSheet($worksheetIndex):bool
$xlsx->getStyles():array
Examples
XLSX to html table
echo SimpleXLSX::parse('book.xlsx')->toHTML();
or
if ( $xlsx = SimpleXLSX::parse('book.xlsx') ) { echo '<table border="1" cellpadding="3" style="border-collapse: collapse">'; foreach( $xlsx->rows() as $r ) { echo '<tr><td>'.implode('</td><td>', $r ).'</td></tr>'; } echo '</table>'; } else { echo SimpleXLSX::parseError(); }
or styled html table
if ( $xlsx = SimpleXLSX::parse('book_styled.xlsx') ) { echo $xlsx->toHTMLEx(); }
XLSX read huge file, xlsx to csv
if ( $xlsx = SimpleXLSX::parse( 'xlsx/books.xlsx' ) ) { $f = fopen('book.csv', 'wb'); // fwrite($f, chr(0xEF) . chr(0xBB) . chr(0xBF)); // UTF-8 BOM foreach ( $xlsx->readRows() as $r ) { fputcsv($f, $r); // fputcsv($f, $r, ';', '"', "\\", "\r\n"); } fclose($f); } else { echo SimpleXLSX::parseError(); }
XLSX get sheet names and sheet indexes
// Sheet numeration started 0 if ( $xlsx = SimpleXLSX::parse( 'xlsx/books.xlsx' ) ) { print_r( $xlsx->sheetNames() ); print_r( $xlsx->sheetName( $xlsx->activeSheet ) ); }
Array
(
[0] => Sheet1
[1] => Sheet2
[2] => Sheet3
)
Sheet2
Using rowsEx() to extract cell info
$xlsx = SimpleXLSX::parse('book.xlsx'); print_r( $xlsx->rowsEx() );
Array
(
[0] => Array
(
[0] => Array
(
[type] => s
[name] => A1
[value] => ISBN
[href] =>
[f] =>
[format] =>
[s] => 0
[css] => color: #000000;font-family: Calibri;font-size: 17px;
[r] => 1
[hidden] =>
[width] => 13.7109375
[height] => 0
[comment] =>
)
[1] => Array
(
[type] =>
[name] => B1
[value] => 2016-04-12 13:41:00
[href] => Sheet1!A1
[f] =>
[format] => m/d/yy h:mm
[s] => 0
[css] => color: #000000;font-family: Calibri;font-size: 17px;
[r] => 2
[hidden] => 1
[width] => 16.5703125
[height] => 0
[comment] => Serg: See transaction history
)
| type | cell type |
| name | cell name (A1, B11) |
| value | cell value (1233, 1233.34, 2022-02-21 00:00:00, String) |
| href | internal and external links |
| f | formula |
| s | style index, use $xlsx->cellFormats[ $index ] to get style |
| css | generated cell CSS |
| r | row index |
| hidden | hidden row or column |
| width | width in custom units |
| height | height in points (pt, 1/72 in) |
| comment | Cell comment as plain text |
Select Sheet
$xlsx = SimpleXLSX::parse('book.xlsx'); // Sheet numeration started 0, we select second worksheet foreach( $xlsx->rows(1) as $r ) { // ... }
Get sheet by index
$xlsx = SimpleXLSX::parse('book.xlsx'); echo 'Sheet Name 2 = '.$xlsx->sheetName(1);
XLSX::parse remote data
if ( $xlsx = SimpleXLSX::parse('https://www.example.com/example.xlsx' ) ) { $dim = $xlsx->dimension(1); // don't trust dimension extracted from xml $num_cols = $dim[0]; $num_rows = $dim[1]; echo $xlsx->sheetName(1).':'.$num_cols.'x'.$num_rows; } else { echo SimpleXLSX::parseError(); }
XLSX::parse memory data
// For instance $data is a data from database or cache if ( $xlsx = SimpleXLSX::parseData( $data ) ) { print_r( $xlsx->rows() ); } else { echo SimpleXLSX::parseError(); }
Get Cell (slow)
echo $xlsx->getCell(0, 'B2'); // The Hobbit
DateTime helpers
// default SimpleXLSX datetime format is YYYY-MM-DD HH:MM:SS (ISO, MySQL) echo $xlsx->getCell(0,'C2'); // 2016-04-12 13:41:00 // custom datetime format $xlsx->setDateTimeFormat('d.m.Y H:i'); echo $xlsx->getCell(0,'C2'); // 12.04.2016 13:41 // unixstamp $xlsx->setDateTimeFormat('U'); $ts = $xlsx->getCell(0,'C2'); // 1460468460 echo gmdate('Y-m-d', $ts); // 2016-04-12 echo gmdate('H:i:s', $ts); // 13:41:00 // raw excel value $xlsx->setDateTimeFormat( NULL ); // returns as excel datetime $xd = $xlsx->getCell(0,'C2'); // 42472.570138889 echo gmdate('m/d/Y', $xlsx->unixstamp( $xd )); // 04/12/2016 echo gmdate('H:i:s', $xlsx->unixstamp( $xd )); // 13:41:00
Rows with header values as keys
if ( $xlsx = SimpleXLSX::parse('books.xlsx')) { // Produce array keys from the array values of 1st array element $header_values = $rows = []; foreach ( $xlsx->rows() as $k => $r ) { if ( $k === 0 ) { $header_values = $r; continue; } $rows[] = array_combine( $header_values, $r ); } print_r( $rows ); }
Array
(
[0] => Array
(
[ISBN] => 618260307
[title] => The Hobbit
[author] => J. R. R. Tolkien
[publisher] => Houghton Mifflin
[ctry] => USA
)
[1] => Array
(
[ISBN] => 908606664
[title] => Slinky Malinki
[author] => Lynley Dodd
[publisher] => Mallinson Rendel
[ctry] => NZ
)
)
Debug
use Shuchkin\SimpleXLSX; ini_set('error_reporting', E_ALL ); ini_set('display_errors', 1 ); if ( $xlsx = SimpleXLSX::parseFile('books.xlsx', true ) ) { echo $xlsx->toHTML(); } else { echo SimpleXLSX::parseError(); }
Classic OOP style
use SimpleXLSX; $xlsx = new SimpleXLSX('books.xlsx'); // try...catch if ( $xlsx->success() ) { foreach( $xlsx->rows() as $r ) { // ... } } else { echo 'xlsx error: '.$xlsx->error(); }
More examples here
Error Codes
SimpleXLSX::ParseErrno(), $xlsx->errno()
| code | message | comment |
|---|---|---|
| 1 | File not found | Where file? UFO? |
| 2 | Unknown archive format | ZIP? |
| 3 | XML-entry parser error | bad XML |
| 4 | XML-entry not found | bad ZIP archive |
| 5 | Entry not found | File not found in ZIP archive |
| 6 | Worksheet not found | Not exists |
shuchkin/simplexlsx 适用场景与选型建议
shuchkin/simplexlsx 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 4.15M 次下载、GitHub Stars 达 1.82k, 最近一次更新时间为 2018 年 11 月 07 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「php」 「excel」 「xlsx」 「parser」 「backend」 「reader」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 shuchkin/simplexlsx 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 shuchkin/simplexlsx 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 shuchkin/simplexlsx 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
This Symfony bundle integrates PhpSpreadsheet into Symfony using Twig.
PHPExcel - OpenXML - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine
Yii2 export extension
PHP Excel Library
PHPExcel - OpenXML - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine
Alfabank REST API integration
统计信息
- 总下载量: 4.15M
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1831
- 点击次数: 19
- 依赖项目数: 23
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2018-11-07