【问题标题】:PHPExcel SUMIF Returns Wrong / Not Calculated FormulaPHPExcel SUMIF 返回错误/未计算公式
【发布时间】:2016-04-14 08:11:57
【问题描述】:

我有一个带有简单测试公式 =SUMIF(D8:D18,2,E8:E18) 的单元格 C13。 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

解析器堆栈:- Array ( [0] => Array ( [type] => Cell Reference [value] => D8 [reference] => D8 ) [1] => Array ( [type] => Cell Reference [value] => D18 [参考] => D18 ) [2] => 数组 ( [类型] => 二元运算符 [值] => : [参考] => ) [3] => 数组 ( [类型] => 值 [值] => 2 [reference] => ) [4] => Array ( [type] => Cell Reference [value] => E8 [reference] => E8 ) [5] => Array ( [type] => Cell Reference [value ] => E18 [reference] => E18 ) [6] => Array ( [type] => Binary Operator [value] => : [reference] => ) [7] => Array ( [type] => Operand函数 SUMIF() [value] => 3 [reference] => ) [8] => Array ( [type] => Function [value] => SUMIF( [reference] => ) ) 的计数

计算值为0

评估日志:

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

【问题讨论】:

    标签: php excel phpexcel


    【解决方案1】:

    好吧,如果这会给任何人带来问题。我个人所做的是将 MathTrig.php 中的 SUMIF 函数更改为以下内容。在我的情况下,我想在我的 $array 和 $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;
     }
    }
    

    完美运行。如果有人有更好的写作方法,请告诉我。

    【讨论】:

      猜你喜欢
      • 2021-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-02
      • 1970-01-01
      • 2015-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多