Exception PHPExcel致命错误:未捕获异常';例外情况';带有消息';公式错误:意外,';

Exception PHPExcel致命错误:未捕获异常';例外情况';带有消息';公式错误:意外,';,exception,excel-formula,export-to-excel,average,phpexcel,Exception,Excel Formula,Export To Excel,Average,Phpexcel,我在谷歌上搜索过,但找不到任何解决方案。 我想做的是用php从报告中生成一个excel5导出文件 每当我尝试平均得出以下错误次数时: Fatal error: Uncaught exception 'Exception' with message 'myexcelsheet!F38 -> Formula Error: Unexpected ,' 这是给出错误的公式: =SUM(F9:F36)/COUNTIF(F9:F36, "*" & "<>00:00:00" &am

我在谷歌上搜索过,但找不到任何解决方案。
我想做的是用php从报告中生成一个excel5导出文件

每当我尝试平均得出以下错误次数时:

Fatal error: Uncaught exception 'Exception' with message 'myexcelsheet!F38 -> Formula Error: Unexpected ,'
这是给出错误的公式:

=SUM(F9:F36)/COUNTIF(F9:F36, "*" & "<>00:00:00" & "*")
全部错误:

Fatal error: Uncaught exception 'Exception' with message 'myexcelsheet!F38 -> Formula Error: Unexpected ,' in /path/to/PHPExcel/Classes/PHPExcel/Cell.php:293 Stack trace: #0 /path/to/PHPExcel/Classes/PHPExcel/Worksheet.php(702): PHPExcel_Cell->getCalculatedValue() #1 /path/to/PHPExcel/Classes/PHPExcel/Writer/Excel5/Worksheet.php(295): PHPExcel_Worksheet->calculateColumnWidths() #2 /path/to/PHPExcel/Classes/PHPExcel/Writer/Excel5.php(194): PHPExcel_Writer_Excel5_Worksheet->close() #3 /path/to/rep-functions.php(985): PHPExcel_Writer_Excel5->save('/path/t...') #4 /path/to/report.php(462): export_excel(Array, Array, 'report.ph...', Array, Array, Array) #5 {main} thrown in /path/to/PHPExcel/Classes/PHPExcel/Cell.php on line 293
这是我从testFormula函数得到的

Formula Value is=SUM(F9:F36)/COUNTIF(F9:F36,"*" & "00:00:00" & "*") Expected Value is UNKNOWN Parser Stack :- Array ( [0] => Array ( [type] => Cell Reference [value] => F9 [reference] => F9 ) [1] => Array ( [type] => Cell Reference [value] => F36 [reference] => F36 ) [2] => Array ( [type] => Binary Operator [value] => : [reference] => ) [3] => Array ( [type] => Operand Count for Function SUM() [value] => 1 [reference] => ) [4] => Array ( [type] => Function [value] => SUM( [reference] => ) [5] => Array ( [type] => Cell Reference [value] => F9 [reference] => F9 ) [6] => Array ( [type] => Cell Reference [value] => F36 [reference] => F36 ) [7] => Array ( [type] => Binary Operator [value] => : [reference] => ) [8] => Array ( [type] => Value [value] => "*" [reference] => ) [9] => Array ( [type] => Value [value] => "00:00:00" [reference] => ) [10] => Array ( [type] => Binary Operator [value] => & [reference] => ) [11] => Array ( [type] => Value [value] => "*" [reference] => ) [12] => Array ( [type] => Binary Operator [value] => & [reference] => ) [13] => Array ( [type] => Operand Count for Function COUNTIF() [value] => 2 [reference] => ) [14] => Array ( [type] => Function [value] => COUNTIF( [reference] => ) [15] => Array ( [type] => Binary Operator [value] => / [reference] => ) ) CALCULATION ENGINE ERROR: Worksheet!F38 -> Formula Error: Unexpected , Evaluation Log: Array ( ) 公式值为=总和(F9:F36)/COUNTIF(F9:F36,“*”和“00:00:00”和“*”) 预期值未知 分析器堆栈:- 排列 ( [0]=>阵列 ( [类型]=>单元格引用 [值]=>F9 [参考]=>F9 ) [1] =>阵列 ( [类型]=>单元格引用 [值]=>F36 [参考]=>F36 ) [2] =>阵列 ( [类型]=>二进制运算符 [值]=>: [参考]=> ) [3] =>阵列 ( [类型]=>函数SUM()的操作数计数 [值]=>1 [参考]=> ) [4] =>阵列 ( [类型]=>函数 [值]=>总和( [参考]=> ) [5] =>阵列 ( [类型]=>单元格引用 [值]=>F9 [参考]=>F9 ) [6] =>阵列 ( [类型]=>单元格引用 [值]=>F36 [参考]=>F36 ) [7] =>阵列 ( [类型]=>二进制运算符 [值]=>: [参考]=> ) [8] =>阵列 ( [类型]=>值 [值]=>“*” [参考]=> ) [9] =>阵列 ( [类型]=>值 [值]=>“00:00:00” [参考]=> ) [10] =>阵列 ( [类型]=>二进制运算符 [值]=>& [参考]=> ) [11] =>阵列 ( [类型]=>值 [值]=>“*” [参考]=> ) [12] =>阵列 ( [类型]=>二进制运算符 [值]=>& [参考]=> ) [13] =>阵列 ( [type]=>函数COUNTIF()的操作数计数 [值]=>2 [参考]=> ) [14] =>阵列 ( [类型]=>函数 [值]=>COUNTIF( [参考]=> ) [15] =>阵列 ( [类型]=>二进制运算符 [值]=>/ [参考]=> ) ) 计算引擎错误:工作表!F38->公式错误:意外, 评估日志: 排列 ( ) 如果你需要更多信息,请告诉我


提前感谢!

使用此功能调试计算引擎:

function testFormula($sheet,$cell) {
    $formulaValue = $sheet->getCell($cell)->getValue();
    echo 'Formula Value is' , $formulaValue , PHP_EOL;
    $expectedValue = $sheet->getCell($cell)->getOldCalculatedValue();
    echo 'Expected Value is '  , ((!is_null($expectedValue)) ? $expectedValue : 'UNKNOWN') , PHP_EOL;


     PHPExcel_Calculation::getInstance()->writeDebugLog = true;
    $calculate = false;
    try {
        $tokens = PHPExcel_Calculation::getInstance()->parseFormula($formulaValue,$sheet->getCell($cell));
        echo 'Parser Stack :-' , PHP_EOL;
        print_r($tokens);
        echo PHP_EOL;
        $calculate = true;
    } catch (Exception $e) {
        echo 'PARSER ERROR: ' , $e->getMessage() , PHP_EOL;

        echo 'Parser Stack :-' , PHP_EOL;
        print_r($tokens);
        echo PHP_EOL;
    }

    if ($calculate) {
        try {
            $cellValue = $sheet->getCell($cell)->getCalculatedValue();
            echo 'Calculated Value is ' , $cellValue , PHP_EOL;

            echo 'Evaluation Log:' , PHP_EOL;
            print_r(PHPExcel_Calculation::getInstance()->debugLog);
            echo PHP_EOL;
        } catch (Exception $e) {
            echo 'CALCULATION ENGINE ERROR: ' , $e->getMessage() , PHP_EOL;

            echo 'Evaluation Log:' , PHP_EOL;
            print_r(PHPExcel_Calculation::getInstance()->debugLog);
            echo PHP_EOL;
        }
    }
}

您需要将工作表对象和单元格ID作为参数传递,它会生成词法分析器和解析器如何计算公式的详细日志

我已经添加了该函数,但无法从中看出什么。输出有问题。很抱歉,函数中遗漏了一行。谢谢,我想我已经找到问题所在。[14]=>工作表!F38->计算计数({25569;25569;25569;25569;25569;25569;25569;25569;25569;25569;25569;25569;25569;25569;25569;25569;25569;25569;25569;25569;25569;25569;25569;25569;25569;25569;25569;25569;25569;25569}),“>25569}”)我在这里看到一个值是25569000081019;25569;25569;25569}>,“>25567秒后的值。看起来25569000081019是逗号而不是小数点-内部需要美国/英国格式
function testFormula($sheet,$cell) {
    $formulaValue = $sheet->getCell($cell)->getValue();
    echo 'Formula Value is' , $formulaValue , PHP_EOL;
    $expectedValue = $sheet->getCell($cell)->getOldCalculatedValue();
    echo 'Expected Value is '  , ((!is_null($expectedValue)) ? $expectedValue : 'UNKNOWN') , PHP_EOL;


     PHPExcel_Calculation::getInstance()->writeDebugLog = true;
    $calculate = false;
    try {
        $tokens = PHPExcel_Calculation::getInstance()->parseFormula($formulaValue,$sheet->getCell($cell));
        echo 'Parser Stack :-' , PHP_EOL;
        print_r($tokens);
        echo PHP_EOL;
        $calculate = true;
    } catch (Exception $e) {
        echo 'PARSER ERROR: ' , $e->getMessage() , PHP_EOL;

        echo 'Parser Stack :-' , PHP_EOL;
        print_r($tokens);
        echo PHP_EOL;
    }

    if ($calculate) {
        try {
            $cellValue = $sheet->getCell($cell)->getCalculatedValue();
            echo 'Calculated Value is ' , $cellValue , PHP_EOL;

            echo 'Evaluation Log:' , PHP_EOL;
            print_r(PHPExcel_Calculation::getInstance()->debugLog);
            echo PHP_EOL;
        } catch (Exception $e) {
            echo 'CALCULATION ENGINE ERROR: ' , $e->getMessage() , PHP_EOL;

            echo 'Evaluation Log:' , PHP_EOL;
            print_r(PHPExcel_Calculation::getInstance()->debugLog);
            echo PHP_EOL;
        }
    }
}