由於PHPExcel已經不再維護,PhpSpreadsheet是PHPExcel的下一個版本。PhpSpreadsheet是一個用純PHP編寫的庫,並引入了命名空間,PSR規范等。這里簡單介紹下PhpSpreadsheet的導入導出功能。
1、安裝
- 使用composer安裝:
composer require phpoffice/phpspreadsheet
- GitHub下載:
https://github.com/PHPOffice/PhpSpreadsheet
2、excel文件導出
/** * excel文件導出 */ function export() { require_once __DIR__ . '/vendor/autoload.php'; $data = [ ['title1' => '111', 'title2' => '222'], ['title1' => '111', 'title2' => '222'], ['title1' => '111', 'title2' => '222'] ]; $title = ['第一行標題', '第二行標題']; // Create new Spreadsheet object $spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); // 方法一,使用 setCellValueByColumnAndRow //表頭 //設置單元格內容 foreach ($title as $key => $value) { // 單元格內容寫入 $sheet->setCellValueByColumnAndRow($key + 1, 1, $value); } $row = 2; // 從第二行開始 foreach ($data as $item) { $column = 1; foreach ($item as $value) { // 單元格內容寫入 $sheet->setCellValueByColumnAndRow($column, $row, $value); $column++; } $row++; } // 方法二,使用 setCellValue //表頭 //設置單元格內容 $titCol = 'A'; foreach ($title as $key => $value) { // 單元格內容寫入 $sheet->setCellValue($titCol . '1', $value); $titCol++; } $row = 2; // 從第二行開始 foreach ($data as $item) { $dataCol = 'A'; foreach ($item as $value) { // 單元格內容寫入 $sheet->setCellValue($dataCol . $row, $value); $dataCol++; } $row++; } // Redirect output to a client’s web browser (Xlsx) header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="01simple.xlsx"'); header('Cache-Control: max-age=0'); // If you're serving to IE 9, then the following may be needed header('Cache-Control: max-age=1'); // If you're serving to IE over SSL, then the following may be needed header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified header('Cache-Control: cache, must-revalidate'); // HTTP/1.1 header('Pragma: public'); // HTTP/1.0 $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx'); $writer->save('php://output'); exit; }
結果:

3、excel文件保存到本地
/** * excel文件保存到本地 */ function save() { require_once __DIR__ . '/vendor/autoload.php'; $data = [ ['title1' => '111', 'title2' => '222'], ['title1' => '111', 'title2' => '222'], ['title1' => '111', 'title2' => '222'] ]; $title = ['第一行標題', '第二行標題']; // Create new Spreadsheet object $spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); //表頭 //設置單元格內容 $titCol = 'A'; foreach ($title as $key => $value) { // 單元格內容寫入 $sheet->setCellValue($titCol . '1', $value); $titCol++; } $row = 2; // 從第二行開始 foreach ($data as $item) { $dataCol = 'A'; foreach ($item as $value) { // 單元格內容寫入 $sheet->setCellValue($dataCol . $row, $value); $dataCol++; } $row++; } // Save $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx'); $writer->save('01simple.xlsx'); }
4、讀取excel文件內容
/** * 讀取excel文件內容 */ function read() { require_once __DIR__ . '/vendor/autoload.php'; $inputFileName = dirname(__FILE__) . '/01simple.xlsx'; $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($inputFileName); // 方法二 $sheetData = $spreadsheet->getActiveSheet()->toArray(null, true, true, true); return $sheetData; }
結果:

可能出現的問題:
1、Fatal error: Uncaught Error: Class 'PhpOffice\PhpSpreadsheet\Spreadsheet' not found
這是因為沒有自動加載。可以手動引入加載文件。
require_once __DIR__ . '/vendor/autoload.php';
或者:
require_once __DIR__ . '/vendor/phpoffice/phpspreadsheet/src/Bootstrap.php';
2、Fatal error: Interface 'Psr\SimpleCache\CacheInterface' not found
這是因為沒有psr文件,缺少simple-cache模塊。如果使用composer安裝的話會自動生成。沒有的話可以手動下載。
GitHub下載地址:https://github.com/php-fig/simple-cache/releases
