PHPExcel和小计

PHPExcel和小计,php,phpexcel,Php,Phpexcel,我使用PHPExcel解析XLSX文件。我发现,当使用SUM等函数聚合值时,小计单元格不会被忽略。是否需要设置或设置某些内容,以强制PHPExcel在求和时不考虑带有小计公式的单元格?如果不可能,可能会有一些解决办法?如果涵盖全部小计,一个简单的解决办法是接受所有值都将根据需要进行求和,然后所有小计也将进行求和-无论如何都应该是相同的总数,因此,只需将结果求和并除以2。最后,我编写了一个类似于toArray函数的函数来解析Excel工作表,并返回以前存储在工作表xml中v标记中的缓存值。这将阻止

我使用PHPExcel解析XLSX文件。我发现,当使用SUM等函数聚合值时,小计单元格不会被忽略。是否需要设置或设置某些内容,以强制PHPExcel在求和时不考虑带有小计公式的单元格?如果不可能,可能会有一些解决办法?

如果涵盖全部小计,一个简单的解决办法是接受所有值都将根据需要进行求和,然后所有小计也将进行求和-无论如何都应该是相同的总数,因此,只需将结果求和并除以2。

最后,我编写了一个类似于toArray函数的函数来解析Excel工作表,并返回以前存储在工作表xml中v标记中的缓存值。这将阻止PHPExcel尝试计算单元格值。PHPExcel没有公开这样的函数。请注意,它在缓存值不可用的情况下使用计算值。实际上,缓存值应该始终可用,因为工作表将由Excel生成,Excel填充缓存值字段

function getCachedSheetData($sheet)
{
    /*  Usage
     sheet: $excel_obj->getActiveSheet()
    */

    // This function is similar to the toArray function, but returns previously cached values to prevent PHPExcel from calculating any formulas
    $toreturn = array();

    foreach ($sheet->getRowIterator() as $row)
    {
        $toreturn[] = array();

        $cellIterator = $row->getCellIterator();
        $cellIterator->setIterateOnlyExistingCells(false); // This loops all cells, even if it is not set. By default, only cells that are set will be iterated.

        foreach ($cellIterator as $cell)
        {
            if ($cell->getOldCalculatedValue() === null)
            {
                $toreturn[$cell->getRow()][$cell->getColumn()] = $cell->getValue();
            }
            else
            {
                $toreturn[$cell->getRow()][$cell->getColumn()] = $cell->getOldCalculatedValue();
            }
        }
    }

    return $toreturn;
}

使用小计而不是总和,这应该忽略前面的小计。这是在Excel或PHPExcelIt中以本机方式执行时的结果。PHPExcel似乎不会忽略小计单元格。解析XLSX文件时,我得到的某些单元格值与Excel文件中的值不一致。原因是上述小计问题。我无法更改需要分析的XLSX文件的格式。不幸的是,我们不能假设小计单元格必须覆盖将要求和的整个单元格范围,因此我们不能简单地将结果除以二