2012-03-21 24 views
5

ページ上にExcelファイルデータを印刷しようとしています。PHP Excel計算式

$val = $cell->getValue(); 
echo '<td>' . $val . '</td>'; 

$ valの場合、私がチェックする方法:私はすべての良い働き、PHPExcelのLIBを使用し、それを行うには、印刷式の横に、私は、このような方法で値を印刷し、このような式=SUM(C2:C5)

との単純な例を持っています公式ですか?手で必要な情報を挿入しますが、どのように私ができる -

PHPExcel_Cell_DataType::dataTypeForValue($val);は、それが私の$val

OFCでちょうど別の1つの文字列であることを私はループの中でそれを計算し、it`sa最後の行場合チェクすることができます私に語りましたそれを簡単に計算しますか?

あなたのご意見をお聞かせください。ありがとう。

答えて

9

PHPExcel_Cell_DataType::dataTypeForValue($val);は常に、式のためにあなたの文字列を教えてくれます。数式はデータではなくセルに関連しています。セルオブジェクトのgetDataType()メソッドは、式のために'f'を返します。

getValue()ではなくgetCalculatedValue()を使用すると、PHPExcelはセルに式が含まれているかどうかを判断します。そうでない場合は、結果を計算して返します。そうでない場合は、返されたものが返されます。getValue();もう1つの方法は、getFormattedValue()です。セルに設定されている規則に従ってフォーマットされた文字列を返します。 。そして、それが数式セルであれば、それは同様に計算を行ったでしょう。日付としてフォーマットされたセルの数値ではなく、日付文字列を取得する場合に特に便利です。

toArray()またはrangeToArray()メソッドを使用してセルのループを回避することもできます。この方法では、セル値の配列が返されますが、配列をループする必要があります。これらのメソッドは両方とも、式を計算するかどうか、および書式設定を適用するかどうかを設定できる引数があります。

+0

申し訳ありませんが、サンプルコードを表示できますか? – enchance

+0

サンプルコードは何ですか?セルに数式が含まれているかどうかをテストするには?数式セルの計算値を取得しますか?どのtoArray()型のメソッドを使用していますか? –

+0

'' f ''をチェックする代わりに '' PHPExcel_Cell_DataType :: TYPE_FORMULA''を使用してください。すべてのセルタイプはDataType.phpの 'class PHPExcel_Cell_DataType'で宣言されています –

3

"$ valが式であるかどうかを確認するにはどうすればよいですか?" Excelで

すべての式ので=で始まる:式が文字列であるため、

<?php 
$String = 'SUM(B3:B8)'; 

# See http://www.php.net/manual/en/language.types.string.php 
# $String{} is deprecated as of PHP 6. 
if($String[0] == '='){ 
    echo 'Yes'; 
} else { 
    echo 'No'; 
} 
?> 

OR

<?php 
function IsExcelFormula($String=null){ 
    if(!$String OR strlen($String) <= 0){ 
     return false; 
    } 

    $First = $String[0]; 

    return ($First == '=' ? true : false); 
} 

var_dump(IsExcelFormula('=SUM(B8:B9)')); // bool(true) 
var_dump(IsExcelFormula('TOTAL(B3:B6)')); // bool(false) 
?> 
+0

イェップ、そうです。しかし、私のテーブルがもっと広くなり、明日私は1つ以上の式を持っていれば、私はすべての式を解析してクラスを書くべきだと思いますか? =)私はすでに開発者によって書かれたと思うが、見つけられない。 –

+0

はい、すべてを解析する必要があるかもしれません...しかし、単一の文字列(Excelファイルからすべてのデータを含む)を解析すると、正規表現を使用することができます。 –

+0

ええ、私はどれくらいのレコードを持っているのか正確にはわかりません。テーブルには1000個のレコードがあり、テーブルを印刷するには1ループ、合計を得るにはもう1つのループが必要です。レコードの平均などの他の関数が必要な場合は、memmoryで何が起こりますか? –