PHPExcel读取表格首先引入类IOFactory.phprequire_once'../PHPExcel/IOFactory.php';$filePath="test.xlsx";//测试文件加载测试文件$inputFileType=PHPExcel_IOFactory::identify($filePath)判断文件类型$objReader=PHPExcel_IOFactory::createReader($inputFileType);实例化类型对象$objPHPExcel=$objReader->load($filePath);加载文件后,主要判断Excel2007和Excel5类型,即xlsx/xlsm/xltx/xltm和xls/xlt格式文件try{$inputFileType=PHPExcel_IOFactory::identify($filePath);if($inputFileType!=="Excel5"&&$inputFileType!=="Excel2007"){unlink($filePath)&&str_alert(-1,"请确保导入的文件格式正确!");}$objReader=PHPExcel_IOFactory::createReader($inputFileType);$objPHPExcel=$objReader->load($filePath);}catch(Exception$e){unlink($filePath)&&str_alert(-1,'加载文件时发生错误:''.pathinfo($filePath,PATHINFO_BASENAME).'":'.$e->getMessage());}获取当前工作表$sheet=$objPHPExcel->getSheet(0);//或$sheet=$objPHPExcel->getActiveSheet();获取工作表的行数和列数$highestRow=$sheet->getHighestRow();$highestColumn=$sheet->getHighestColumn();注意:有时候你会发现你的表格只有5行,但是获取到的$highestRow却有7、8行甚至更多,这可能是因为你在操作你的表格时不小心点到了其他行。虽然没有填写内容,但是getHighestRow也可以识别行数;如果要获取有内容的行数,应该使用getHighestDataRow和getHighestDataColumn源码注释ThisisthestringHighestrownumberthatcontainsdata,即包含数据的字符串的最高行数。单元格xlsx类型表格单元格的具体内容通过类似xy轴坐标获取,可以通过类似$sheet->getCell("A1")->getValue();获取$sheet->getCell("B2")->getValue();获取对应位置的内容,如果不想遍历字母,可以使用数字索引方式$sheet->getCellByColumnAndRow(0,1);$sheet->getCellByColumnAndRow(1,2);注意坐标中第一个参数从0开始,0代表A,1代表B...,第二个参数从1开始。下面是遍历表格获取所有单元格内容:$dataSet=array();for($column="A";$column<=$highestColumn;$column++){//列数以A列开头for($row=4;$row<=$highestRow;$row++){//行数从第4行开始$cell=$sheet->getCell($column.$row)->getValue();if($cellinstanceofPHPExcel_RichText){//富文本转换字符串$cell=$cell->__toString();}$dataSet[$row][]=$cell;其中,富文本转换字符串是通过$cellinstanceofPHPExcel_RichText判断是否为富文本。查阅资料后发现,如果你单元格中的字符串包含两种以上的字体,就会自动设置为富文本。这时候就需要__toString()转换来判断合并后的单元格是否在左上角。当我们循环输出所有单元格的时候,发现有的合并单元格只有左上坐标的内容,其他的都是null。比如A4和A5合并为一个Cell,getCell("A4")内容正常,但是getCell("A5")为null。可以通过isMergeRangeValueCell来判断某个cell是否为左上角$sheet->getCell('A'.$row)->isMergeRangeValueCell()当$row为4时返回true,当$row为5时返回false。转换时间获取表格中的时间格式内容,需要PHPExcel_Shared_Date::ExcelToPHP()把它转换成PHP可以识别的时间Formatdate('Y-m-d',PHPExcel_Shared_Date::ExcelToPHP($sometime);
