一,其實針對文件的讀取,PHPExcel提供了很多格式的文件,可以看下底層封裝,支持各種常用和不常用的文件類型支持。,針對不同的類型都有相應的文件處理類 PHPExcel_Reader_xxxx.php
1 public static function createReaderForFile($pFilename) 2 { 3 // First, lucky guess by inspecting file extension 4 $pathinfo = pathinfo($pFilename); 5 6 $extensionType = null; 7 if (isset($pathinfo['extension'])) { 8 switch (strtolower($pathinfo['extension'])) { 9 case 'xlsx': // Excel (OfficeOpenXML) Spreadsheet 10 case 'xlsm': // Excel (OfficeOpenXML) Macro Spreadsheet (macros will be discarded) 11 case 'xltx': // Excel (OfficeOpenXML) Template 12 case 'xltm': // Excel (OfficeOpenXML) Macro Template (macros will be discarded) 13 $extensionType = 'Excel2007'; 14 break; 15 case 'xls': // Excel (BIFF) Spreadsheet 16 case 'xlt': // Excel (BIFF) Template 17 $extensionType = 'Excel5'; 18 break; 19 case 'ods': // Open/Libre Offic Calc 20 case 'ots': // Open/Libre Offic Calc Template 21 $extensionType = 'OOCalc'; 22 break; 23 case 'slk': 24 $extensionType = 'SYLK'; 25 break; 26 case 'xml': // Excel 2003 SpreadSheetML 27 $extensionType = 'Excel2003XML'; 28 break; 29 case 'gnumeric': 30 $extensionType = 'Gnumeric'; 31 break; 32 case 'htm': 33 case 'html': 34 $extensionType = 'HTML'; 35 break; 36 case 'csv': 37 // Do nothing 38 // We must not try to use CSV reader since it loads 39 // all files including Excel files etc. 40 break; 41 default: 42 break; 43 } 44 45 if ($extensionType !== null) { 46 $reader = self::createReader($extensionType); 47 // Let's see if we are lucky 48 if (isset($reader) && $reader->canRead($pFilename)) { 49 return $reader; 50 } 51 } 52 }
二,以xlsx為例,讀取單個表格只有一個sheet
1 require_once dirname(__FILE__) . '/PHPExcel/Classes/PHPExcel/IOFactory.php'; 2 3 $objReader = PHPExcel_IOFactory::createReader('Excel2007'); 4 $objPHPExcel = $objReader->load("test.xlsx"); //返回PHPExcel對象 5 $activeSheet = $objPHPExcel->getActiveSheet(); 6 $data = $activeSheet->toArray(); 7 print_r($data); 8 9 //針對data進行業務處理 10 .......
三,針對多個sheet,PHPExcel也提供了迭代讀取的辦法
//針對多個sheet的讀取 foreach($objPHPExcel->getWorksheetIterator() as $workSheet){ //可以直接讀取整個sheet的結果 $data = $workSheet->toArray(); //業務處理 ........ /*
* 按行循環迭代 每一行,然后再每一個列
echo 'Worksheet - ' , $workSheet->getTitle() , PHP_EOL; foreach($workSheet->getRowIterator() as $row){ echo ' Row number - ' , $row->getRowIndex() , PHP_EOL; $cellIterator = $row->getCellIterator(); $cellIterator->setIterateOnlyExistingCells(false); foreach ($cellIterator as $cell) { if (!is_null($cell)) { echo ' Cell - ' , $cell->getCoordinate() , ' - ' , $cell->getCalculatedValue() , PHP_EOL; } } }
*/
/** 按列循環,一列一旬
foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
echo 'Worksheet - ' , $worksheet->getTitle() , EOL;
foreach ($worksheet->getColumnIterator() as $column) {
echo ' Column index - ' , $column->getColumnIndex() , EOL;
$cellIterator = $column->getCellIterator();
$cellIterator->setIterateOnlyExistingCells(true); // Loop all cells, even if it is not set
foreach ($cellIterator as $cell) {
if (!is_null($cell)) {
echo ' Cell - ' , $cell->getCoordinate() , ' - ' , $cell->getCalculatedValue() , EOL;
}
}
}
}
*
}
