前言
最近在开发一个线上笔试系统,后台需要直接使用Excel表导入试题数据。在开发导入Excel试题的功能时使用了用于操作Excel文件的PHP库——PHPExcel。
用于记录试题的Excel板拥有多个工作表(Sheet),因此需要使用PHPExcel实现多个Sheet信息的读取。
正文
1 在项目中引入PHPExcel
首先在PHPExcel的git仓库获取代码包,其中,核心类都在/Classes
目录中,我们需要把/Classes
目录copy到自己的项目中。
PHPExcel不支持命名空间,所以在支持命名空间的Framework中导入PHPExcel需要使用直接导入的方法。(我一开始还妄图给PHPExcel加入命名空间,哭泣 qwq)
2 使用PHPExcel读取多个Sheet
2.1 引入所需类
1 2
| require_once VENDOR_PATH.'/PHPExcel.php'; require_once VENDOR_PATH.'/PHPExcel/IOFactory.php';
|
2.2 创建读取方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| private function excelAction($paperPath, $paperName) { $reader = \PHPExcel_IOFactory::createReader('Excel2007'); $PHPExcel = $reader->load(PAPER_PATH.$paperPath); $sheetCount = $PHPExcel->getSheetCount(); for ($currentSheet = 1; $currentSheet < SHEET_COUNT; $currentSheet++) { $sheet = $PHPExcel->getSheet($currentSheet); $highestRow = $sheet->getHighestRow(); $highestColumn = $sheet->getHighestColumn(); echo "第 $currentSheet 个工作表,行数 = $highestRow ,列数 = $highestColumn "."</br>"; for ($row = 1; $row <= $highestRow; $row++){ for ($column = 'A'; $column <= $highestColumn; $column++) { if(!$sheet->getCell($column.$row)->getValue()) break; $dataset[] = $sheet->getCell($column.$row)->getValue(); echo $column.$row.":".$sheet->getCell($column.$row)->getValue()."<br />"; } } } }
|
3 总结
在PHPExcel中能读取文件的类有很多个(针对不同的文件类型),使用PHPExcel_IOFactory
仅是方法之一。在官方给出的Example中写入文件的例子较多,读取的例子则会比较少些。
在读取多个工作表的功能中,主要的方法是getSheetCount()
和getSheet()
,运用这两个方法可以对工作表进行循环读取。
参考资料
《总结了下PHPExcel官方读取的几个例子》