解決php導入表格,表格值使用了函數(公式),獲取到的值是NULL

作者:星辰網絡工作室 日期:2022-06-22 瀏覽:457

導入表格時,如果表格值使用了公式,則使用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;
????????}
香港三级日本三级人妇三级四