PhpExcel SUM()返回0

PhpExcel SUM()返回0,php,excel-formula,phpexcel,Php,Excel Formula,Phpexcel,如标题所述,我在PHP中使用的SUM()函数在生成的文档中始终显示“0” 奇怪的是,当我直接在文档中执行相同的公式时,通过选择单元格等,结果很好:/ 代码如下: public function generateDocument($name, $description, $params, $criteres, $options) { // création du doc au format xsl $doc = new \PHPExcel(); $doc->getP

如标题所述,我在PHP中使用的SUM()函数在生成的文档中始终显示“0”

奇怪的是,当我直接在文档中执行相同的公式时,通过选择单元格等,结果很好:/

代码如下:

public function generateDocument($name, $description, $params, $criteres, $options) {

    // création du doc au format xsl
    $doc = new \PHPExcel();
    $doc->getProperties()->setCreator(UASG_NAME)
        ->setTitle($name)
        ->setDescription($description);

    $doc->setActiveSheetIndex(0);
    $worksheet = $doc->getActiveSheet();
    // création du nom de l'onglet pour les datas
    $worksheet->setTitle($this->createSheetTitle($name));

    $dataService = new DataService($this->pdo, $this->context, $this->logger);
    $table=$dataService->search($params, $criteres);

    $this->startTimer("GENEREDATAS");
    $headRow=null;$totalRow=null;
    $this->currencyColumns = array();

    $lineNumber = 1;

    // ajout du titre en haut du fichier
    if(isset($options->heading) && $options->heading!=""){
        $worksheet->mergeCells('A1:Z2');
        $worksheet->setCellValue('A1', $options->heading);
        $worksheet->getStyle('A1')->getFont()->setSize(13);
        $worksheet->getStyle('A1')->getFont()->setBold(true);
        $previousLineNumber=4;
    }else{
        $previousLineNumber=0;
    }

    foreach ($table['rows'] as $rowindex => $row) {
        $nbColumn=count($row['cells']);
        foreach ($row['cells'] as $column => $cell) {
            // header
            if ($rowindex == 0) {
                $title = $table['headers'][$column];
                $this->setCellValue($worksheet, $column, $previousLineNumber + 1, $title);
                $headRow = $previousLineNumber + 1;
            }
            // cellule
            if ($row['level'] == 0) {
                if ($column == 0) {
                    $lineNumber++;
                }
                $columnCell=$column;
                $this->setCellValue($worksheet, $columnCell, $lineNumber + $previousLineNumber, $cell);
            }
            $worksheet->getColumnDimensionByColumn($column)->setAutoSize(true);
        }
    }

    if(isset($options->totalPrice) && $options->totalPrice == 1){
        $borderStyle= array(
            'borders' => array(
                'allborders' => array(
                    'style' => PHPExcel_Style_Border::BORDER_THICK
                )
            )
        );
        $worksheet->getStyleByColumnAndRow($nbColumn-1, $lineNumber+$previousLineNumber+2)->applyFromArray($borderStyle);
        $worksheet->setCellValueByColumnAndRow($nbColumn-1, $lineNumber+$previousLineNumber+2, '=SUM(E2:E100)');
        // '=SUM(F'.($previousLineNumber+2).':F'.($lineNumber+2).')');
    }

    if (isset($nbColumn)) {
        $lastColumn = $nbColumn - 1;
        // mise en forme des titres
        $range = \PHPExcel_Cell::stringFromColumnIndex(0) . $headRow . ':' . \PHPExcel_Cell::stringFromColumnIndex($lastColumn) . $headRow;
        $worksheet->getStyle($range)->applyFromArray($this->getHeadStyle());

        $range = \PHPExcel_Cell::stringFromColumnIndex(0) . ($previousLineNumber) . ':' . \PHPExcel_Cell::stringFromColumnIndex($nbColumn) . ($lineNumber + $previousLineNumber + 1);
        $worksheet->getStyle($range)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

        // mise en forme des colonnes des devises
        if (count($this->currencyColumns)>0) {
            foreach($this->currencyColumns as $column) {
                $range = \PHPExcel_Cell::stringFromColumnIndex($column) . ($previousLineNumber) . ':' . \PHPExcel_Cell::stringFromColumnIndex($column) . ($lineNumber + $previousLineNumber + 1);
                $worksheet->getStyle($range)->getNumberFormat()->setFormatCode('#,##0.00_-[$' . $this->currencySymbol . ' ]');
            }
        }

        unset($nbColumn);
    }



    $this->stopTimer("GENEREDATAS");


    $doc->setActiveSheetIndex(0);
    $this->startTimer("WRITE");
    $writer = \PHPExcel_IOFactory::createWriter($doc, 'Excel2007');
    //$writer->setPreCalculateFormulas(false);
    $writer->save('php://output');
    $this->stopTimer("WRITE");


}
我想这可能是语言的问题。因为我正在用英语Ubuntu打开文档,所以这可能是问题所在,但我不知道如何轻松通过

如果有人能帮忙,那就太棒了。

你需要调整这个
$writer->setPreCalculateFormulas(true)

您需要调整此值
$writer->setPreCalculateFormulas(true)

$writer->setPreCalculateFormulas(true)这方面给我的教训是永远不要听那些抱怨默认值的人抱怨默认值?很抱歉非常感谢!先生,你值得你的支持:)不,你不是在抱怨。。。。。由于去年有人抱怨,我更改了该特定项目的默认设置setting@MarkBaker对不起,但是。。。你能回答这个问题吗?:/这对搜索答案的人来说会更好,另外,看到这个问题没有用绿色表示,我也会感到不安。。(如此自私)
$writer->setPreCalculateFormulas(真)这方面给我的教训是永远不要听那些抱怨默认值的人抱怨默认值?很抱歉非常感谢!先生,你值得你的支持:)不,你不是在抱怨。。。。。由于去年有人抱怨,我更改了该特定项目的默认设置setting@MarkBaker对不起,但是。。。你能回答这个问题吗?:/这对搜索答案的人来说会更好,另外,看到这个问题没有用绿色表示,我也会感到不安。。(太自私了)