導入表格時,如果表格值使用了公式,則使用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; ????????}