我正在尝试在页面上打印Excel文件数据。要做到这一点,我使用PHPExcel lib,一切正常,除了打印公式,我有一个简单的例子,使用这样的公式=SUM(C2:C5)
我以这种方式打印值:
$val = $cell->getValue();
echo '<td>' . $val . '</td>';
如何检查$ val是否为公式?
PHPExcel_Cell_DataType::dataTypeForValue($val);
告诉我,这只是我$val
Ofc我可以在一个循环中计算它,并且如果它是最后一行则chek - 用手插入所需的信息,但我如何能够轻松地计算它?
很高兴听到您的建议。感谢。
答案 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)
?>