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_name john@example.com,john jane@example.com,jane// $rows是 IlluminateSupportLazyCollection 的一個實例 $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是 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_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 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架構師教程目錄大全,只要你看完保證薪資上升一個臺階(持續更新)?zhuanlan.zhihu.com以上內容希望幫助到大家,很多PHPer在進階的時候總會遇到一些問題和瓶頸,業務代碼寫多了沒有方向感,不知道該從那里入手去提升,對此我整理了一些資料,包括但不限于:分布式架構、高可擴展、高性能、高并發、服務器性能調優、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql優化、shell腳本、Docker、微服務、Nginx等多個知識點高級進階干貨需要的可以免費分享給大家,需要的可以加入我的官方群點擊此處。
總結
以上是生活随笔為你收集整理的shell读取excel_[PHP 开源类库]simple-Excel — 兼具优雅与性能的Excel和CSV文件读写工具...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vuex mysql_vuex + ko
- 下一篇: mysql修改存储引擎报错_MySQL查