PHPExcel和小计

时间:2014-08-11 18:29:49

标签: php phpexcel

我使用PHPExcel来解析XLSX文件。我发现在使用SUM()等函数聚合值时,不会忽略SUBTOTAL()单元格。是否需要设置一个设置或某些内容以强制PHPExcel在对其进行求和时不将带有SUBTOTAL公式的单元格考虑在内?如果不可能,可能会采取一些解决方法吗?

2 个答案:

答案 0 :(得分:1)

最后,我编写了一个类似于toArray()函数的函数,用于解析Excel工作表并返回先前缓存的值(存储在工作表xml中的" v"标记中)。这可以防止PHPExcel尝试计算单元格值。 PHPExcel没有公开这样的功能。请注意,它在缓存值不可用的情况下使用计算值。实际上,缓存的值应始终可用,因为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;
}

答案 1 :(得分:0)

如果覆盖所有小计的一个简单的解决方法是接受所有的值都将被SUMmed(根据需要),然后也是所有的SUBTOTALs - 无论如何都应该达到相同的总数,所以简单的SUM和除以结果2。