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;
}
}
}