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