2016-04-14 3 views
0

У меня есть ячейка C13 с простой тестовой формулой = SUMIF (D8: D18,2, E8: E18). 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

Parser Stack: - Массив ([0] => Массив ([тип] => Ссылка на ячейку [значение] => D8 [ссылка] => D8) [1] => Массив ([тип] => Ссылка на ячейку [значение] => D18 [reference] => D18) [2] => Array ([type] => Binary Operator [значение] =>: [reference] =>) [3] => Array ([type] => Value [value] = > 2 [reference] =>) [4] = > Array ([type] => Cell Reference [значение] => E8 [reference] => E8) [5] => Array ([type] => Cell Reference [значение] => E18 [reference] => E18) [6] => Массив ([type] => Двоичный оператор [значение] =>: [ссылка] =>) [7] => Массив ([type] => Количество операндов для функции SUMIF() [значение] => 3 [ссылка] =>) [8] => Array ([тип] => Функция [значение] => SUMIF ([ссылка] =>))

Расчетное значение равно 0

Оценка журнала:

У любого есть понимание, почему это может произойти. Я видел документацию о том, что в SUMIF не должно быть ошибок, но только с SUMIFS, которые можно переписать как SUMPRODUCT, но в моем случае SUMIF вызывает ошибку.

ответ

0

Хорошо, если это вызывает проблемы для всех. Лично я изменил функцию SUMIF в MathTrig.php на следующее. В моем случае я хочу исключить значения, которые являются «---» в моем массиве $ и $ sum_array. Он также подсчитывает новый массив $ ar count, если значения равны значениям в $ checkVars. Измените оператор 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; 
} 
} 

Он отлично работает. Если кто-то имеет смысл писать это лучше, пожалуйста, дайте мне знать.

Смежные вопросы