2016-04-14 15 views
0

Basit bir test formülü olan bir hücre C13'üm var = SUMIF (D8: D18,2, E8: E18). D8-> D18 2 2'leri tutar ve D8: D18'in değerleri başka bir formülden alınmaz, kodlanır. E8-> E18 aralığı hepsi 1'dir. Excel'de doğru değer 2'dir. Ama PHPExcel'i aşağıdaki basit kodla aradığımda.PHPExcel SUMIF Yanlış/İade Edilmemiş Formül Alıyor

Beklenen Değer 0

Ayrıştırıcı Stack olduğunu (E18:, E8 D18,2 D8):

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

= 0.

Formülü Değeri = SUMIF olduğunu - Array ([0] => Array ([type] => Hücre Referansı [value] => D8 [referans] => D8) [1] => Array ([type] => Hücre Referansı [value] => D18 [reference] => D18) [2] => Array ([type] => İkili Operatör [value] =>: [referans] =>) [3] => Array ([type] => Değer [value] = > 2 [referans] =>) [4] = > Array ([type] => Hücre Referansı [value] => E8 [referans] => E8) [5] => Dizi ([tip] => Hücre Referansı [value] => E18 [referans] => E18) [6] => Array ([type] => İkili Operatör [value] =>: [referans] =>) [7] => Array ([type] => İşlev SUMIF için İşlenen Sayım() [value] => 3 [referans] =>) [8] => Array ([tür] => İşlev [değer] => ETOPLA ([referans] =>))

Hesaplanan değer 0

Değerlendirme Giriş olup:

Bunun neden olabileceği konusunda herhangi bir fikir sahibi olun. SUMIF ile hiçbir hata olmamalı ancak SUMIFS ile SUMIFS olarak yeniden yazılabilir, ancak benim durumumda SUMIF hataya neden olduğunu belirten dökümanları gördüm.

cevap

0

Peki, bu herkes için bir soruna neden olursa. Şahsen yaptığım şey, MathTrig.php'deki SUMIF işlevini aşağıdaki şekilde değiştirdi. Benim durumumda, $ dizim ve $ sum_array öğesindeki '---' değerlerini hariç tutmak istiyorum. Değerler $ checkVars'daki değerlere eşitse, yeni dizi $ ar sayısını da sayar. If ifadesini kendi özelliklerine göre değiştirin.

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

Mükemmel çalışır. Eğer bu kadar iyi bir yazar varsa, lütfen bana bildirin.