您好,登錄后才能下訂單哦!
如何使用PhpSpreadsheet?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
今天遇到一個問題,涉及 php 與 excel 之間數據轉換。之前一直用 PHPExcel,他們的開發組不更新了。但是找到了 PhpSpreadsheet 。
一、介紹
用純 php 編寫的庫,它提供了一組類,允許您讀取和寫入不同的電子表格文件格式
支持格式
環境要求
php 5.6 及以上
php_zip 支持并啟用
php_xml 支持并啟用
php_gd2 支持并啟用
安裝
> composer require phpoffice/phpspreadsheet
hello world
<?php require 'vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); $sheet->setCellValue('A1', 'Hello World !'); $writer = new Xlsx($spreadsheet); $writer->save('hello world.xlsx');
實例
包中帶了實例代碼,位置 vendor/phpoffice/phpspreadsheet/samples 下
> php -S localhost:8000 -t vendor/phpoffice/phpspreadsheet/samples
二、讀取
無需關心文件類型加載,用到了 IOFactory
// 文件路徑 $inputFileName = './sampleData/example1.xls'; $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($inputFileName);
注意:
這不是加載文件的最有效方法, 并且它缺乏在將文件實際讀入 Spreadsheet 對象之前以任何方式配置加載器的靈活性。
知道文件類型,可以自己決定使用哪種讀取器
// 文件路徑 $inputFileName = './sampleData/example1.xls'; /** 創建讀取器 **/ $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls(); // $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx(); // $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xml(); // $reader = new \PhpOffice\PhpSpreadsheet\Reader\Ods(); // $reader = new \PhpOffice\PhpSpreadsheet\Reader\Slk(); // $reader = new \PhpOffice\PhpSpreadsheet\Reader\Gnumeric(); // $reader = new \PhpOffice\PhpSpreadsheet\Reader\Csv(); $spreadsheet = $reader->load($inputFileName);
當只要讀取數據,不要格式時,實例讀取器中 readDataOnly 屬性,如下
$inputFileType = 'Xls'; $inputFileName = './sampleData/example1.xls'; $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType); /** 只要數據 **/ $reader->setReadDataOnly(true); $spreadsheet = $reader->load($inputFileName);
注意:csv 讀取器沒有這個屬性
多個文件合并為一個對象
$inputFileType = 'Csv'; $inputFileNames = [ './sampleData/example1.csv', './sampleData/example2.csv' './sampleData/example3.csv' ]; $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType); /** 拿到第一個 **/ $inputFileName = array_shift($inputFileNames); $spreadsheet = $reader->load($inputFileName); $spreadsheet->getActiveSheet() ->setTitle(pathinfo($inputFileName,PATHINFO_BASENAME)); /** 循環讀取 **/ foreach($inputFileNames as $sheet => $inputFileName) { /** 重新設置工作表索引 **/ $reader->setSheetIndex($sheet+1); /** 把文件當做一個新的工作表載入 **/ $reader->loadIntoExisting($inputFileName,$spreadsheet); /** 設置工作表標題 **/ $spreadsheet->getActiveSheet() ->setTitle(pathinfo($inputFileName,PATHINFO_BASENAME)); }
注意:對多個工作表使用相同的工作表索引不會將文件附加到同一工作表中,而是覆蓋先前加載的結果。您無法將多個 CSV 文件加載到同一工作表中。
轉為數組
文件最后會載入到一個對象中,我稱為 spreadsheet 工作表對象,這個對象中存放著所以工作表集合的信息(數據信息和格式信息、工作表信息等)
$spreadsheet = PhpOffice\PhpSpreadsheet\IOFactory::load("new.xls"); $data = $spreadsheet ->getSheet(0) // 指定第一個工作表為當前 ->toArray(); // 轉為數組 // 或者得到全部工作表的數據數組 $cells=array(); // 工作表對象有迭代器實現 foreach ( $spreadsheet->getWorksheetIterator() as $data ) { $cells = $data->toArray(); }
結語
PhpSpreadsheet 是非常不錯的 php 的電子表格處理工具類,后續有時間在補上寫入和導出。
看完上述內容,你們掌握如何使用PhpSpreadsheet的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。