PHP Excel Расчетные формулы - PullRequest
7 голосов
/ 21 марта 2012

Я пытаюсь распечатать данные файла Excel на странице. Для этого я использовал PHPExcel lib, все работает хорошо, кроме печати формул, у меня есть простой пример с такой формулой =SUM(C2:C5)

Я печатаю значения таким образом:

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

как я могу проверить, является ли $ val формулой?

PHPExcel_Cell_DataType::dataTypeForValue($val); сказал мне, что это просто еще одна строка в моем $val

Ofc, я могу вычислить это в цикле и проверить, если это последняя строка - вставить необходимую информацию руками, но как я могу вычислить это простым способом?

Буду рад услышать ваш совет. Спасибо.

Ответы [ 2 ]

11 голосов
/ 22 марта 2012

PHPExcel_Cell_DataType::dataTypeForValue($val); всегда скажет вам строку для формулы, потому что формула является строкой.Быть формулой связано с ячейкой, а не с данными.Метод getDataType() объекта ячейки вернет 'f' для формулы.

Если вы используете getCalculatedValue() вместо getValue(), тогда PHPExcel определит, содержит ли ячейка формулу или нет.Если это так, то он вычислит результат и вернет его, в противном случае он просто вернет то, что было бы возвращено getValue(); Другой метод, который вы могли бы рассмотреть, - это getFormattedValue(), который вернет строку, отформатированную в соответствии с какиминабор для клетки.И если это была ячейка формулы, то она также выполнила бы расчет.Особенно полезно получать строку даты, а не числовое значение из ячеек, отформатированных как даты.

Вы также можете избежать зацикливания ячеек, используя методы toArray() или rangeToArray(), которые будут возвращать массивзначения ячеек, хотя вам все равно придется зацикливать массив.Оба этих метода имеют аргументы, позволяющие вам установить, следует ли рассчитывать формулы и применять ли форматирование.

3 голосов
/ 21 марта 2012

"как я могу проверить, является ли $ 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';
}
?>

ИЛИ

<?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)
?>
...