PHPExcel SUMIF返回错误/未计算的公式

时间:2016-04-14 08:11:57

标签: php excel phpexcel

我有一个单元格C13,其中有一个简单的测试公式= SUMIF(D8:D18,2,E8:E18)。 D8-> D18保持2 2并且D8:D18的值是硬编码的,不从另一个公式检索。 E8-> E18的范围均为1。在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.

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

预期值为0

Parser Stack: - 数组([0] =>数组([类型] =>单元格参考[值] => D8 [参考] => D8)[1] =>数组([类型] =>单元格参考[ [数学] => D18 [参考] => D18)[2] =>数组([类型] =>二元运算符[值] =>:[参考] =>)[3] =>数组([type] => Value [value] => 2 [reference] =>)[4] =>数组([type] => Cell Reference [value] => E8 [reference] = > E8)[5] =>数组([type] => Cell Reference [value] => E18 [reference] => E18)[6] =>数组([type] =>二进制运算符[value] =>:[reference] =>)[7] =>数组([type] =>函数SUMIF的操作数计数()[value] => 3 [reference] =>) [8] =>数组([type] =>函数[value] => SUMIF([reference] =>))

计算值为0

评估日志:

任何人都可以了解为什么会发生这种情况。我已经看到文档说SUMIF应该没有错误,但只有SUMIFS可以重写为SUMPRODUCT,但在我的情况下,SUMIF导致错误。

1 个答案:

答案 0 :(得分:0)

好吧,如果这对任何人造成问题。我个人所做的是将MathTrig.php中的SUMIF函数更改为以下内容。在我的情况下,我想要排除' ---'在我的$ array和$ sum_array中。如果值等于$ checkVars中的值,它还会计算新数组$ ar count。将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;
 }
}

完美无缺。如果有人有更好的写作方式,请告诉我。