Maison >développement back-end >tutoriel php >phpExcel读取excel文件
之前的博文已经对PHPExcel导出excel文件做了简单的总结,现对他读取excel做以下总结。(对数据量不会很大的建可以采用web直接用此方法读取,如果数据量会很大的话,还是建议web只做上传功能,读取、处理还是放后台吧。PHPExcel还是比较耗费时间、内存的。)
实例代码:
//首先导入PHPExcel require_once 'PHPExcel.php'; $filePath = "test.xlsx"; //建立reader对象 $PHPReader = new PHPExcel_Reader_Excel2007(); if(!$PHPReader->canRead($filePath)){ $PHPReader = new PHPExcel_Reader_Excel5(); if(!$PHPReader->canRead($filePath)){ echo 'no Excel'; return ; } } //建立excel对象,此时你即可以通过excel对象读取文件,也可以通过它写入文件 $PHPExcel = $PHPReader->load($filePath); /**读取excel文件中的第一个工作表*/ $currentSheet = $PHPExcel->getSheet(0); /**取得最大的列号*/ $allColumn = $currentSheet->getHighestColumn(); /**取得一共有多少行*/ $allRow = $currentSheet->getHighestRow(); //循环读取每个单元格的内容。注意行从1开始,列从A开始 for($rowIndex=1;$rowIndex<=$allRow;$rowIndex++){ for($colIndex='A';$colIndex<=$allColumn;$colIndex++){ $addr = $colIndex.$rowIndex; $cell = $currentSheet->getCell($addr)->getValue(); if($cell instanceof PHPExcel_RichText) //富文本转换字符串 $cell = $cell->__toString(); echo $cell; } }
这里需要说明的是上面注释中的“富文本转换字符串”。
PHPExcel读取EXCEl文件中,如果单元格中的内容有两种字体时,读到的是富文本的对象:
例如:单元格中有内容:“测试1”,其中前半部分的“测试”字体为宋体,后半部分的“1”字体为Calibri,这时候通过
$cell = $sheet->getCell($addr)->getValue();
获取单元格的值。并打印:
PHPExcel_RichText Object( [_richTextElements:private] => Array ( [0] => PHPExcel_RichText_TextElement Object ([_text:private] => 测试) [1] => PHPExcel_RichText_Run Object ( [_font:private] => PHPExcel_Style_Font Object ( [_name:private] => Calibri [_size:private] => 11 [_bold:private] => [_italic:private] => [_superScript:private] => [_subScript:private] => [_underline:private] => none [_strikethrough:private] => [_color:private] => PHPExcel_Style_Color Object ( [_argb:private] => FF000000 [_isSupervisor:private] => [_parent:private] => [_parentPropertyName:private] => ) [_parentPropertyName:private] => [_isSupervisor:private] => [_parent:private] => [colorIndex] => 8 ) [_text:private] => 1 ) ) )
可以看到对这样的单元格不能直接读取单元格的文本内容。(注:这里的富文本是我自己的翻译,不知对否)。
另外,读取单元格的函数还有:
//列从0开始,行从1开始
$currentSheet ->getCellByColumnAndRow($colIndex,$rowIndex)->getValue();