PHP Excel计算公式

时间:2012-03-21 17:07:06

标签: php phpexcel

我正在尝试在页面上打印Excel文件数据。要做到这一点,我使用PHPExcel lib,一切正常,除了打印公式,我有一个简单的例子,使用这样的公式=SUM(C2:C5)

我以这种方式打印值:

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

如何检查$ val是否为公式?

PHPExcel_Cell_DataType::dataTypeForValue($val);告诉我,这只是我$val

中的另一个字符串

Ofc我可以在一个循环中计算它,并且如果它是最后一行则chek - 用手插入所需的信息,但我如何能够轻松地计算它?

很高兴听到您的建议。感谢。

2 个答案:

答案 0 :(得分:11)

PHPExcel_Cell_DataType::dataTypeForValue($val);将始终告诉您公式的字符串,因为公式是字符串。作为一个公式与细胞有关,而不是与数据有关。单元格对象的getDataType()方法将为公式返回'f'

如果您使用getCalculatedValue()而不是getValue(),那么PHPExcel将确定该单元格是否包含公式。如果是,那么它将计算结果并返回,否则它将只返回getValue();返回的任何内容。您可能考虑的另一种方法是getFormattedValue(),它将返回一个字符串,格式为无论为细胞设定何种规则。如果它是一个公式单元格,那么它也会完成计算。特别适用于从格式化为日期的单元格中获取日期字符串而不是数值。

您还可以使用toArray()rangeToArray()方法来避免循环单元格,这将返回单元格值数组,但您仍需要循环数组。这两种方法都有参数,允许您设置是否应该计算公式,以及是否应该应用格式。

答案 1 :(得分: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)
?>