该扩展包可让你轻松读取和写入简单的 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_name
john@example.com,john
jane@example.com,jane
// $rows是 Illuminate\Support\LazyCollection 的一个实例
$rows = SimpleExcelReader::create($pathToCsv)->getRows();$rows->each(function(array $rowProperties) {// 循环的第一个 $rowProperties 应该是下面这样的// ['email' => 'john@example', 'first_name' => 'john']
});

读取 Excel 文件

读取 Excel 文件与读取 CSV 文件相同。只需确保提供给 SimpleExcelReader 的 create 方法的路径以 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是 Illuminate\Support\LazyCollection 的一个实例
$rows = SimpleExcelReader::create($pathToCsv)->noHeaderRow()->getRows()->each(function(array $rowProperties) {// 第一次循环的 $rowProperties 会是下面这样// [0 => 'john@example', 1 => 'john']
});

自己创建一个阅读器

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

$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_name
John,Doe
Jane,Doe

写入 Excel 文件

写入 Excel 文件与写入 CSV 相同。只需确保提供给 SimpleExcelWriter 的 create 方法的路径以 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 Box\Spout\Writer\Common\Creator\Style\StyleBuilder;
use Box\Spout\Common\Entity\Style\Color;$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 来获取到底层的 \Box\Spout\Reader\WriterInterface 实现:

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

更多学习内容请访问:

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

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

[PHP 开源类库]simple-Excel — 兼具优雅与性能的Excel和CSV文件读写工具相关推荐

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

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

  2. Excel中过长数字的问题以及CSV文件避免这个问题的处理办法

    在处理导出的csv文件时发现这样一个问题用Excel和nodepad++打开如下图 所有为什么要这样呢,笔者就进行了实验.首先,在不给excel的单元格设置格式的情况下输入<=11个数字,会正常 ...

  3. Python 实现txt、excel、csv文件读写【附源码】

    目录 前言 一.txt文件读写 二.excel文件读写 总结 前言 本文介绍使用Python进行文件读写操作,包括txt文件.excel文件(xlsx.xls.csv) 编译器使用的是PyCharm ...

  4. 解决Excel打开UTF-8编码的CSV文件乱码的问题 实测好用

    解决Excel打开UTF-8编码的CSV文件乱码的问题 1 2 3 4 5 6 分步阅读 CSV是一个平面文件,它的编码方式有多种.比如,MongoDB以UTF-8格式存储数据,在使用mongoexp ...

  5. CSV文件如何使用EXCEL打开

    打开Excel, 执行"数据"->"自文本", 选择CSV文件,出现文本导入向导,选择"分隔符号",下一步, 勾选"逗号&q ...

  6. Python学习笔记4——csv/excel文件读写保存

    工具包准备和设置检查 csv文件读写和保存 csv文件读写 csv文件保存 Excel工作表文件读写和保存 excel文件读写 excel文件保存 总结 附录代码 工具包准备和设置检查 相关工具包导入 ...

  7. csv文件转换为excel文件

    首先,这里需要简单的介绍一个软件PHPmyadmin,可能对一些大佬或者是学习python方向的同学对这个软件相对熟悉, 我是在一位学长帮我写过一个程序之后了解到这个软件,学长简单介绍的是这是一个可视 ...

  8. 解决Excel打开UTF-8编码CSV文件乱码的问题

    最近在用QT读写CSV文件,发现将数据写入到CSV文件中,使用记事本打开文件是正常的,使用Excel打开,中文是乱码的,下面把原因和解决方法记录一下. 问题产生的原因 为什么excel打开utf-8存 ...

  9. 解决Excel打开UTF-8编码CSV文件乱码的问题亲测有效

    前段时间用某软件导出了一个CSV文件,需要在Excel中处理并打印,但是我直接用Excel打开这个CSV文件却发现,文件中的所有中文字符都变成了乱码,经过自己的尝试,采用数据导入的方法解决了问题,后来 ...

最新文章

  1. DELL Poweredge服务器安装操作系统指南 补全之磁盘驱动制作
  2. 关于python 中的 sys.argv 的使用方法
  3. ap drawing 课件_ILITEK TP AP introduction.ppt
  4. PocketSphinx语音识别系统的编程
  5. 元宵快乐:看SQL大师们用SQL绘制的团圆
  6. 【BZOJ4008】亚瑟王,概率DP
  7. springcloud工作笔记107---Springboot中MyBatis 自动转换 map-underscore-to-camel-case=true 开启驼峰命名映射
  8. 医疗行业容灾备份建设迫在眉睫
  9. 细枝末节都交给App 我只负责享受生活 | 2016与我的数字生活
  10. 实验4:Linux下C语言编程
  11. 2010版gmp 计算机系统,2010版GMP附录:计算机化系统 整体及条款解读
  12. 区块链技术驱动商业银行开展供应链金融业务的创新路径
  13. 打开其他软件时,老是弹出Xftp7安装的问题(msi报错)
  14. 林利军2018年致投资人的信:这是一个极致者胜的时代
  15. Nginx配置虚拟主机(基于域名、端口及IP)
  16. 2022电大国家开放大学网上形考任务-民族理论与民族政策非免费(非答案)
  17. 百度网盘不限速下载器
  18. 实现1V1音视频实时互动直播系统 十二、第九节 直播客户端的实现
  19. 菜鸟教程java的list_Java菜鸟教程
  20. 商业银行会计学(四)--贷款业务的核算

热门文章

  1. SKIL/工作流程/SKIL上的分布式训练
  2. java poi 获取单元格批注信息
  3. 看过来:在日本博士找工作有多难?
  4. tair(一)--入门
  5. contexcontext:component-scant:component-scan
  6. 应急响应之系统排查方法
  7. php授权v2.1,PHP授权验证系统V2.1完整版 带补丁包
  8. 小猪二手车 v4.1 安卓版
  9. 读书笔记之《人人都是产品经理》(附思维导图)
  10. 6.3.2 基于DMG文件安装MySQL