nealyip / spreadsheet
box/spout 和 phpexcel 的电子表格读写抽象层
v1.1.2
2018-07-04 08:32 UTC
Requires
- php: >=7
- ext-zip: *
- box/spout: ^2.7
- illuminate/config: ~5.1.0|~5.2.0|~5.3.0|~5.4.0|~5.5.0|~5.6.0
- illuminate/support: ~5.1.0|~5.2.0|~5.3.0|~5.4.0|~5.5.0|~5.6.0
- phpoffice/phpexcel: ^1.8
- phpoffice/phpspreadsheet: ^1.3
Requires (Dev)
- phpunit/phpunit: ^6.2.1
README
box/spout 和 phpexcel 的电子表格读写抽象层,支持 Laravel
更新
v1.1.2 修复下载 xlsx 的头部问题,在 boxspout 写入函数上抛出通用异常
v1.1.0 添加 PHPSpreadsheet。PHPExcel 已弃用。允许从 .env 使用带命名空间的类来使用 SPREADSHEET_WRITER 和 SPREADSHEET_READER
安装
composer require nealyip/spreadsheet
将此提供者添加到 config/app.php
\Nealyip\Spreadsheet\SpreadsheetServiceProvider::class,
配置
发布配置
php artisan vendor:publish --provider="Nealyip\Spreadsheet\SpreadsheetServiceProvider"
只需更改 config/spreadsheet.php 以选择一个电子表格数据提供者
默认使用 PHPSpreadsheet
或在 .env 文件中配置
SPREADSHEET_WRITER=PHPSpreadsheet SPREADSHEET_READER=BoxSpout
如果您实现了自己的 Writer 或 Reader,您可以使用完整的类名。
SPREADSHEET_WRITER=App\Spreadsheet\CustomerWriter
请记住实现
Nealyip\Spreadsheet\Writer
如何使用
依赖注入
读取器
use Nealyip\Spreadsheet\Reader; class Sth{ protected $_reader; public function __construct(Reader $reader) { $this->_reader = $reader; } public function readFile($filename){ $data = $this->_reader->toKeyValueArray($filename); }
使用生成器的读取器
use Nealyip\Spreadsheet\Reader; class Sth{ protected $_reader; public function __construct(Reader $reader) { $this->_reader = $reader; } public function readFile($filename){ $data = $this->_reader->toKeyValueArray($filename); foreach ($this->_reader->read($filename) as $item){ // $item is a row in array form } }
写入器
use Nealyip\Spreadsheet\Writer; class Sth{ protected $_writer; public function __construct(Writer $writer) { $this->_writer = $writer; } public function writeFile($filename){ $headers = ['Name', 'Gender', 'Age']; $this->_writer ->setup("report.xlsx") ->useSheet('Report') ->writeArray([['Tom','M','20'], ['Ann','F','24']], $headers) ->save(); }
使用生成器的写入器
use Nealyip\Spreadsheet\Writer; class Sth{ protected $_writer; public function __construct(Writer $writer) { $this->_writer = $writer; } /** * Data source from DB/API etc * * @return \Generator */ protected function _data(){ $data = [['Tom','M','20'], ['Ann','F','24']]; foreach ($data as $d) { yield $d; } } public function writeFile($filename){ $headers = ['Name', 'Gender', 'Age']; $this->_writer ->setup("report.xlsx") ->useSheet('Report') ->write($this->_data(), $headers) ->save(); }
写入到本地文件
use Nealyip\Spreadsheet\Writer; class Sth{ protected $_writer; public function __construct(Writer $writer) { $this->_writer = $writer; } /** * Data source from DB/API etc * * @return \Generator */ protected function _data(){ $data = [['Tom','M','20'], ['Ann','F','24']]; foreach ($data as $d) { yield $d; } } public function writeFile($filename){ $headers = ['Name', 'Gender', 'Age']; $this->_writer ->setup("report.xlsx", false) ->useSheet('Report') ->write($this->_data(), $headers) ->save(); }
内存限制和执行超时
如果您遇到内存耗尽问题,您可以通过以下方式调整内存限制
ini_set('memory_limit', '1000M');
或对于执行超时
ini_set('max_execution_time', 300);