2016-04-14 70 views
0

我有一個簡單的測試公式= SUMIF(D8:D18,2,E8:E18)的單元格C13。 D8-> D18保存2 2,D8:D18的值被硬編碼,不能從另一個公式中檢索。 E8-> E18的範圍均爲1。在Excel中,正確的值是2.但是,當我用以下簡單代碼調用PHPExcel時。PHPExcel SUMIF返回錯誤/未計算公式

$objReader = PHPExcel_IOFactory::createReader($inputFileType); 
PHPExcel_Calculation::getInstance($objPHPExcel)->clearCalculationCache(); 
$objReader = $objPHPExcel->setActiveSheetIndexByName("TestSumIf"); 
$value = $objPHPExcel->getActiveSheet()->getCell('C13')->getCalculatedValue(); 

我得到$值= 0

公式值是= SUMIF(D8:D18,2,E8:E18)

預期值是0

分析器堆棧: - Array([0] => Array([type] => Cell Reference [value] => D8 [reference] => D8)[1] => Array([type] => Cell Reference [value] => D18 [參考] => D18)[2] => Array([type] => Binary Operator [value] =>:[reference] =>)[3] => Array([type] => Value [value] = > 2 [reference] =>)[4] = > Array([type] => Cell Reference [value] => E8 [reference] => E8)[5] => Array([type] => Cell Reference [value] => E18 [reference] => E18)數組函數SUMIF()[value] =>的數組([type] =>數組([type] => Binary Operator [value] => [reference] =>)[7] => 3 [參照] =>)[8] =>數組([型] =>函數[值] => SUMIF([參考] =>))

計算值爲0

評價日誌:

任何人都知道爲什麼會發生這種情況。我看到文檔說應該沒有SUMIF錯誤,但只有SUMIFS可以重寫爲SUMPRODUCT,但在我的情況下,SUMIF導致錯誤。

回答

0

那麼,如果這對任何人造成問題。我個人的做法是將MathTrig.php中的SUMIF函數更改爲以下內容。在我的情況下,我想排除我的$數組和$ sum_array中的「---」的值。如果值等於$ checkVars中的值,它也計算新的數組$ ar計數。將if語句更改爲您自己的規格。

public static function SUMIF($array,$criteria,$sum_array) 
{ 
$array = PHPExcel_Calculation_Functions::flattenArray($array); 
$sum_array = PHPExcel_Calculation_Functions::flattenArray($sum_array); 
$arraySize = sizeof($array); 
$arraySizeCount = 0; 
$checkVars = array(18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75); 
    for($i = 0; $i < $arraySize;$i++) 
    { 
     if($array[$i] === '---') 
     { 
      unset($array[$i]); 
      unset($sum_array[$i]); 
     } 
     else if(in_array($array[$i], $checkVars)) 
     { 
      $arraySizeCount++; 
     } 
    } 
if(is_array($array) && is_array($sum_array) && trim($criteria)!="") 
{ 
    $result = 0 ; 
     for($i=0;$i<$arraySizeCount;$i++) 
     { 
      if(preg_match("/^</",$criteria)) 
      { 
       $value = preg_replace("/^</","",$criteria); 
       $result += $array[$i] < $value ? $sum_array[$i]:0; 
      } 
      elseif(preg_match("/^>/",$criteria)) 
      { 
       $value = preg_replace("/^>/","",$criteria); 
       $result += $array[$i] > $value ? $sum_array[$i]:0; 
      } 
      else 
      { 
       $value = $criteria; 
       $result += $array[$i] == $value ? $sum_array[$i]:0; 
       echo $result; 
      } 
     } 
    return $result ? $result:0; 
} 
} 

它完美地工作。如果任何人有更好的寫作的意思,請讓我知道。