1

Googleで検索しましたが、これに対する解決策が見つかりませんでした。
私がやろうとしているのは、php を使用してレポートから Excel5 エクスポート ファイルを作成することです。

平均回数を作ろうとするたびに、次のエラーが発生します。

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

これは、エラーを与える式です。

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

セルのデータ型は Time です。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関数から得たものです

式の値は=SUM(F9:F36)/COUNTIF(F9:F36,"*" & "00:00:00" & "*")  
期待値は不明です  
パーサー スタック :-

配列
(
    [0] => 配列
        (
            [タイプ] => セル参照
            [値] => F9
            [参照] => F9
        )

    [1] => 配列
        (
            [タイプ] => セル参照
            [値] => F36
            【参考】⇒F36
        )
    [2] => 配列
        (
            [タイプ] => 二項演算子
            [値] => :
            【参考】⇒
        )

    [3] => 配列
        (
            [type] => 関数 SUM() のオペランド数
            [値] => 1
            【参考】⇒
        )

    [4] => 配列
        (
            [タイプ] => 関数
            [値] => SUM(
            【参考】⇒
        )

    [5] => 配列
        (
            [タイプ] => セル参照
            [値] => F9
            [参照] => F9
        )

    [6] => 配列
        (
            [タイプ] => セル参照
            [値] => F36
            【参考】⇒F36
        )

    [7] => 配列
        (
            [タイプ] => 二項演算子
            [値] => :
            【参考】⇒
        )

    [8] => 配列
        (
            [タイプ] => 値
            [値] => "*"
            【参考】⇒
        )

    [9] => 配列
        (
            [タイプ] => 値
            [値] => "00:00:00"
            【参考】⇒
        )

    [10] => 配列
        (
            [タイプ] => 二項演算子
            [値] => &
            【参考】⇒
        )

    [11] =>配列
        (
            [タイプ] => 値
            [値] => "*"
            【参考】⇒
        )

    [12] =>配列
        (
            [タイプ] => 二項演算子
            [値] => &
            【参考】⇒
        )

    [13] =>配列
        (
            [type] => 関数 COUNTIF() のオペランド数
            [値] => 2
            【参考】⇒
        )

    [14] =>配列
        (
            [タイプ] => 関数
            [値] => COUNTIF(
            【参考】⇒
        )

    [15] =>配列
        (
            [タイプ] => 二項演算子
            [値] => /
            【参考】⇒
        )

)
計算エンジン エラー: ワークシート!F38 -> 数式エラー: 予期しない、  
評価ログ:  
配列    
(  
)  

さらに情報が必要な場合はお知らせください。

前もって感謝します!

4

1 に答える 1

3

この関数を使用して、計算エンジンをデバッグします。

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 を引数として渡す必要があり、レクサーとパーサーが数式を評価する方法の詳細なログが生成されます。

于 2013-02-28T09:10:51.913 に答える