PHPExcel SUMIF возвращает неверную / не вычисленную формулу

У меня есть ячейка C13 с простой формулой теста = СУММЕСЛИ (D8: D18,2, E8: E18). D8-> D18 Содержит 2 2, а значения D8: D18 жестко запрограммированы, а не извлекаются из другой формулы. Диапазон E8-> E18 - это все единицы. В Excel правильное значение - 2. Но когда я вызываю PHPExcel с помощью следующего простого кода.

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

Я получаю $ value = 0.

Значение формулы = СУММЕСЛИ (D8: D18,2, E8: E18)

Ожидаемое значение 0

Стек парсера: - Массив ([0] => Массив ([тип] => Ссылка на ячейку [значение] => D8 [ссылка] => D8) [1] => Массив ([тип] => Ссылка на ячейку [значение] => D18 [ссылка] => D18) [2] => Массив ([тип] => Двоичный оператор [значение] =>: [ссылка] =>) [3] => Массив ([тип] => Значение [ значение] => 2 [ссылка] =>) [4] => Массив ([тип] => Ссылка на ячейку [значение] => E8 [ссылка] => E8) [5] => Массив ([тип] => Ссылка на ячейку [значение] => E18 [ссылка] => E18) [6] => Массив ([тип] => Двоичный оператор [значение] =>: [ссылка] =>) [7] => Массив ([тип ] => Количество операндов для функции СУММЕСЛИ () [значение] => 3 [ссылка] =>) [8] => Массив ([тип] => функция [значение] => СУММЕСЛИ ([ссылка] =>))

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

Журнал оценки:

Кто-нибудь знает, почему это может происходить. Я видел документацию, в которой говорится, что не должно быть ошибок с СУММЕСЛИ, а только с СУММЕСЛИМН, которые можно переписать как СУММПРОИЗВ, но в моем случае СУММЕСЛИ вызывает ошибку.


person MakDo    schedule 14.04.2016    source источник


Ответы (1)


Хорошо, если это у кого-то вызывает проблемы. Я лично изменил функцию СУММЕСЛИ в MathTrig.php на следующее. В моем случае я хочу исключить значения, которые являются '---' в моем $ array и $ 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;
 }
}

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

person MakDo    schedule 14.04.2016