PhpSpreadsheet 电子表格(excel) PHP处理笔记
生活随笔
收集整理的這篇文章主要介紹了
PhpSpreadsheet 电子表格(excel) PHP处理笔记
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1 安裝
composer require phpoffice/phpspreadsheetGithub地址:PHPOffice/PhpSpreadsheet
文檔地址:PhpSpreadsheet’s documentation
2 基本用法
// 這里是以thinkphp5環(huán)境為例 use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx;$spreadsheet = new Spreadsheet(); // 創(chuàng)建新表格 $spreadsheet->createSheet(); // 創(chuàng)建sheet $sheet = $spreadsheet->getActiveSheet(); // 獲取當前sheet $sheet->setCellValue('A1', 'Hello World222 !'); // 設置單元格A1的值header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');//瀏覽器輸出07Excel文件 //header('Content-Type:application/vnd.ms-excel');//瀏覽器將要輸出Excel03版本文件 header('Content-Disposition: attachment;filename="'.time().'.xlsx"');//瀏覽器輸出瀏覽器名稱 header('Cache-Control: max-age=0'); //禁止緩存 $writer = new Xlsx($spreadsheet); $writer->save('php://output'); // 直接下載excel // $writer->save('1.xlsx'); 默認保存到根目錄,thinkphp5里默認是public目錄// 斷開連接,銷毀對象 $spreadsheet->disconnectWorksheets(); unset($spreadsheet);3 添加sheet
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;// 添加sheet $myWorkSheet = new Worksheet($spreadsheet, 'My Data'); // sheet名稱 $spreadsheet->addSheet($myWorkSheet, 0); // 添加sheet位置index4 獲取sheet下標/名稱,切換sheet
$sheet = $spreadsheet->getSheet(1); // 根據(jù)下標獲取sheet $sheet = $spreadsheet->getSheetByName('Worksheet 1'); //根據(jù)name獲取sheet // 切換當前sheet $spreadsheet->setActiveSheetIndex(1); // 按sheet下標切換 $spreadsheet->setActiveSheetIndexByName('Sheet 1'); // 按sheet name切換5 批量設置單元格數(shù)據(jù)
// 設置單元格數(shù)據(jù) $arrayData = [[NULL, 2010, 2011, 2012],['Q1', 12, 15, 21],['Q2', 56, 73, 86],['Q3', 52, 61, 69],['Q4', 30, 32, 0], ]; $sheet->fromArray($arrayData, // The data to set NULL, // Array values with this value will not be set'C3' // Top left coordinate of the worksheet range where// we want to set these values (default is A1) );
如果是設置一行,可以設置一維數(shù)組;
如果想設置一列數(shù)據(jù),可以這樣:
$arrayData = [1,2,3,4]; $columnArray = array_chunk($rowArray, 1);6 加載表格
方式1:
use PhpOffice\PhpSpreadsheet\IOFactory;$inputFileName = 'C:\Users\Administrator\Document\1.xlsx'; /** 獲得文檔類型(xls/xlsx) **/ $inputFileType = IOFactory::identify($inputFileName); /** Create a new Reader of the type that has been identified **/ $reader = IOFactory::createReader($inputFileType); /** Load $inputFileName to a Spreadsheet Object **/ $spreadsheet = $reader->load($inputFileName);方式2:
use PhpOffice\PhpSpreadsheet\IOFactory;$inputFileName = 'C:\Users\Administrator\Document\1.xlsx'; $spreadsheet = IOFactory::load($inputFileName);因第一種方式得到了具體的文件類型,所以處理起來會比較快。
7 遍歷單元格
use PhpOffice\PhpSpreadsheet\IOFactory;//1. 使用迭代器遍歷單元格 $reader = IOFactory::createReader('Xlsx'); $reader->setReadDataOnly(TRUE); $spreadsheet = $reader->load('1.xlsx'); $worksheet = $spreadsheet->getActiveSheet(); echo '<table>' . PHP_EOL; foreach ($worksheet->getRowIterator() as $row) {echo '<tr>' . PHP_EOL;$cellIterator = $row->getCellIterator();$cellIterator->setIterateOnlyExistingCells(FALSE);foreach ($cellIterator as $cell) {echo '<td>' .$cell->getValue() .'</td>' . PHP_EOL;}echo '</tr>' . PHP_EOL; } echo '</table>' . PHP_EOL;// 2.使用索引循環(huán)遍歷單元格 use PhpOffice\PhpSpreadsheet\Cell\Coordinate; // Get the highest row and column numbers referenced in the worksheet $highestRow = $worksheet->getHighestRow(); // e.g. 10 $highestColumn = $worksheet->getHighestColumn(); // e.g 'F' $highestColumnIndex = Coordinate::columnIndexFromString($highestColumn); // e.g. 5echo '<table>' . "\n"; for ($row = 1; $row <= $highestRow; ++$row) {echo '<tr>' . PHP_EOL;for ($col = 1; $col <= $highestColumnIndex; ++$col) {$value = $worksheet->getCellByColumnAndRow($col, $row)->getValue();echo '<td>' . $value . '</td>' . PHP_EOL;}echo '</tr>' . PHP_EOL; } echo '</table>' . PHP_EOL;8 刪除sheet
$sheetIndex = $spreadsheet->getIndex($spreadsheet->getSheetByName('Worksheet 1') ); $spreadsheet->removeSheetByIndex($sheetIndex);9 設置文檔元數(shù)據(jù)(摘要信息)
$spreadsheet->getProperties()->setCreator("Zhang Ying")->setLastModifiedBy("Zhang Ying")->setTitle("Office 2007 XLSX Test Document")->setSubject("Office 2007 XLSX Test Document")->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")->setKeywords("office 2007 openxml php")->setCategory("Test result file");10 小技巧
(1) 單元格內(nèi)換行
$sheet->getCell('B1')->setValue("hello\nworld"); $sheet->getStyle('B1')->getAlignment()->setWrapText(true);(2) 強制設置單元格格式為string格式,設置正常數(shù)字
$sheet->setCellValueExplicit('A8',"0123456",DataType::TYPE_STRING); $sheet->getStyle('A9')->getNumberFormat()->setFormatCode('00000000000');(3) 設置列寬度自適應
$sheet->getColumnDimension('A')->setAutoSize(true);(4) 按行、列下標設置和查詢單元格數(shù)據(jù)
// 按列和行設置單元格值 $sheet->setCellValueByColumnAndRow(1, 3, 'PhpSpreadsheet Demo'); // 按列和行查詢單元格值 $sheet->getCellByColumnAndRow(2, 5)->getValue();(5) 開啟篩選功能
$spreadsheet->getActiveSheet()->setAutoFilter('A1:E20');(6) 設置打印格式
use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup;$spreadsheet->getActiveSheet()->getPageSetup()->setOrientation(PageSetup::ORIENTATION_LANDSCAPE); $spreadsheet->getActiveSheet()->getPageSetup()->setPaperSize(PageSetup::PAPERSIZE_A4);總結(jié)
以上是生活随笔為你收集整理的PhpSpreadsheet 电子表格(excel) PHP处理笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BootStrap笔记-文本颜色链接颜色
- 下一篇: 判断textarea是否超过行数限制