2013-02-28 1 views
1

Я искал в google, но я не смог найти решение для этого.
Что я пытаюсь сделать, это сделать файл экспорта excel5 из отчета с php.PHPExcel Неустранимая ошибка: исключить исключение «Исключение» с сообщением «Формула Ошибка: Неожиданно»,

Всякий раз, когда я пытаюсь сделать в среднем раз я получаю следующее сообщение об ошибке:

Fatal error: Uncaught exception 'Exception' with message 'myexcelsheet!F38 -> Formula Error: Unexpected ,' 

Это формула, которая дает ошибку:

типы данных
=SUM(F9:F36)/COUNTIF(F9:F36, "*" & "<>00:00:00" & "*") 

клетке времени. С COUNT он работает нормально, но он должен игнорировать 00:00:00 раз.

Это являются включает в себя:

require_once("PHPExcel/Classes/PHPExcel.php"); 
require_once("PHPExcel/Classes/PHPExcel/Writer/Excel5.php"); 
require_once 'PHPExcel/Classes/PHPExcel/Cell/AdvancedValueBinder.php'; 

Всего ошибок:

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  
( 
) 

Позвольте мне знать, если вам нужна дополнительная информация ,

Заранее благодарен!

ответ

4

Используйте эту функцию для отладки расчета двигателя:

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

Вам нужно передать объект электронной таблицы и идентификатор соты в качестве аргументов, и генерирует подробные журналы, как лексический и синтаксический анализатор оценить формулу

+0

Я добавил функцию, но я ничего не могу сделать. –

+0

Выход в вопрос. –

+0

SOrry, пропустил строку в функции –