解决php导入表格,表格值使用了函数(公式),获取到的值是NULL

作者:星辰网络工作室 日期:2022-06-22 浏览:494

导入表格时,如果表格值使用了公式,则使用getValue()获取到的值就是'=D4/E4',

image.png

这时就需要判断当前值是否使用了公式,使用strcspn($value,'=')检查'='的位置,如果使用公式,则使用getOldCalculatedValue()获取值

image.png

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;
        }