![](/img/trans.png)
[英]PHPExcel formula subtotal / teilergebnis - Excel2016 detected problems with content
[英]PHPExcel and subtotal
我使用PHPExcel來解析XLSX文件。 我發現在使用SUM()等函數聚合值時,不會忽略SUBTOTAL()單元格。 是否需要設置一個設置或某些內容以強制PHPExcel在對其進行求和時不將帶有SUBTOTAL公式的單元格考慮在內? 如果不可能,可能會有一些解決方法?
最后,我編寫了一個類似於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;
}
如果覆蓋整個小計的一個簡單的解決方法是接受所有的值都將被SUMmed(根據需要),然后也是所有的SUBTOTAL - 無論如何都應該達到相同的總數,所以簡單地將SUM除以2。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.