导入表格时,如果表格值使用了公式,则使用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;
}