簡體   English   中英

PHPExcel和小計

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM