1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > shell读取excel_[PHP 开源类库]simple-Excel — 兼具优雅与性能的Excel和CSV文件读写工具...

shell读取excel_[PHP 开源类库]simple-Excel — 兼具优雅与性能的Excel和CSV文件读写工具...

时间:2020-04-22 15:52:13

相关推荐

shell读取excel_[PHP 开源类库]simple-Excel — 兼具优雅与性能的Excel和CSV文件读写工具...

该扩展包可让你轻松读取和写入简单的 Excel 和 CSV 文件。在后台使用生成器来确保低内存使用,即使在处理大型文件时也是如此。

这是有关如何读取 Excel 或 CSV 的示例。

SimpleExcelReader::create($pathToFile)->getRows()->each(function(array $rowProperties) {// process the row});

如果$ pathToFile.csv结尾。则假定为 CSV 文件。如果以.xlsx结尾,则假定为 Excel 文件。

安装

你可以通过 composer 安装该软件包:

$ composer require spatie/simple-excel

用法

读取 CSV

想象你有一个包含如下内容的 CSV 文件

email,first_namejohn@,johnjane@,jane

// $rows是 IlluminateSupportLazyCollection 的一个实例$rows = SimpleExcelReader::create($pathToCsv)->getRows();$rows->each(function(array $rowProperties) {// 循环的第一个 $rowProperties 应该是下面这样的// ['email' => 'john@example', 'first_name' => 'john']});

读取 Excel 文件

读取 Excel 文件与读取 CSV 文件相同。只需确保提供给SimpleExcelReadercreate方法的路径以xlsx结尾。

使用懒集合

getRows将返回LazyCollection实例,该实例是 Laravel 框架的一部分。因为在后台使用了生成器,即使是大文件内存使用量也会较低。

你可以在这里. 找到关于LazyCollection的方法

这是一个简单的愚蠢的例子,我们只想处理first_name长度大于 5 的行。

SimpleExcelReader::create($pathToCsv)->getRows()->filter(function(array $rowProperties) {return strlen($rowProperties['first_name']) > 5})->each(function(array $rowProperties) {// processing rows});

读取一个没有标题的文件

如果你要读取一个没有标题的文件,你应该使用noHeaderRow()

// $rows是 IlluminateSupportLazyCollection 的一个实例$rows = SimpleExcelReader::create($pathToCsv)->noHeaderRow()->getRows()->each(function(array $rowProperties) {// 第一次循环的 $rowProperties 会是下面这样// [0 => 'john@example', 1 => 'john']});

自己创建一个阅读器

首先我们已经引入了 box/spout 这个包。 你可以通过getReader方法获取一个阅读器的接口BoxSpoutReaderReaderInterface

$reader = SimpleExcelReader::create($pathToCsv)->getReader();

写入文件#

这里将展示如何写入一个 CSV 文件:

$writer = SimpleExcelWriter::create($pathToCsv)->addRow(['first_name' => 'John','last_name' => 'Doe',])->addRow(['first_name' => 'Jane','last_name' => 'Doe',]);

pathToCsv文件将包含以下内容:

first_name,last_nameJohn,DoeJane,Doe

写入 Excel 文件

写入 Excel 文件与写入 CSV 相同。只需确保提供给SimpleExcelWritercreate方法的路径以xlsx结尾。

将 Excel 文件流式传输到浏览器

无需将文件写入磁盘,您可以将其直接流式传输到浏览器。

$writer = SimpleExcelWriter::streamDownload('your-export.xlsx')->addRow(['first_name' => 'John','last_name' => 'Doe',])->addRow(['first_name' => 'Jane','last_name' => 'Doe',])->toBrowser();

写入没有标题的文件

如果正在写入的文件没有标题行,则应使用noHeaderRow()方法。

$writer = SimpleExcelWriter::create($pathToCsv)->noHeaderRow()->addRow(['first_name' => 'Jane','last_name' => 'Doe',]);});

这将输出:

Jane,Doe

添加布局

这个包底层使用了 box/spout 包。该软件包包含一个StyleBuilder,可用于格式化行。请注意样式只能在 Excel 文档上使用。

use BoxSpoutWriterCommonCreatorStyleStyleBuilder;use BoxSpoutCommonEntityStyleColor;$style = (new StyleBuilder())->setFontBold()->setFontSize(15)->setFontColor(Color::BLUE)->setShouldWrapText()->setBackgroundColor(Color::YELLOW)->build();$writer->addRow(['values, 'of', 'the', 'row'], $style)

有关样式的更多信息,请查阅 Spout 文档.

使用替代定界符

默认情况下,SimpleExcelReader将假定分隔符为,

使用其他分隔符的方法:

SimpleExcelWriter::create($pathToCsv)->useDelimiter(';');

获取写入的行数

您可以获取写入的行数。该数字包括自动添加的标题行。

$writerWithAutomaticHeader = SimpleExcelWriter::create($this->pathToCsv)->addRow(['first_name' => 'John','last_name' => 'Doe',]);$writerWithoutAutomaticHeader->getNumberOfRows() // returns 2

手动使用 writer 对象

因基于 box/spout 包,所以你可以通过getWriter来获取到底层的BoxSpoutReaderWriterInterface实现:

$writer = SimpleExcelWriter::create($pathToCsv)->getWriter();

更多学习内容请访问:

八重樱:腾讯T3-T4标准精品PHP架构师教程目录大全,只要你看完保证薪资上升一个台阶(持续更新)​

以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要的可以加入我的官方群点击此处。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。