导入表格时,如果表格值使用了公式,则使用getValue()获取到的值就是'=D4/E4',
这时就需要判断当前值是否使用了公式,使用strcspn($value,'=')检查'='的位置,如果使用公式,则使用getOldCalculatedValue()获取值
try{ $inputFileType = \PHPExcel_IOFactory::identify($fliename);//获取上传的文件类型 $objReader = \PHPExcel_IOFactory::createReader($inputFileType);//选择使用哪个读取类型 $objReader->setReadDataOnly(true ); $objPHPExcel = $objReader->load($fliename); }catch (\Exception $e){ return ['code'=>100,'msg'=>'请将导出的表格,编辑保存之后再上传']; // echo $e->getMessage(); } $sheet = $objPHPExcel->getSheet(); $highestRow = $sheet->getHighestDataRow(); // 取得总行数 $highestColumn_num = $sheet->getHighestDataColumn(); //列数 暂时没用 手动设置列 $columns = array('A','B','C','D','E','F','G');//数据有几列 $arr_result = array(); $dealer_element = array(); //$j 数据从第几行开始 for ($j = 4; $j <= $highestRow - 1; $j++) { for ($k = 0; $k < count($columns); $k++) { //读取单元格 $value = $objPHPExcel->getActiveSheet()->getCell($columns[$k] . $j)->getValue();//这个就是获取每个单元格的值 // echo strcspn($value,'=').'-'; if(strcspn($value,'=') == 0){ $value = $objPHPExcel->getActiveSheet()->getCell($columns[$k] . $j)->getOldCalculatedValue();//获取单元格使用了公式的值 } $value = trim($value); if (empty($value)) { $value = NULL; } $dealer_element[$k] = $value; //这里可以根据要求,做一些数据的验证 } $arr_result[$j] = $dealer_element; //大文件上传可以使用 yield 返回一个可foreach的对象 减少内存开销 //yield $dealer_element; }