PHPExcel_Cell_DataType::dataTypeForValue($val);
всегда скажет вам строку для формулы, потому что формула является строкой.Быть формулой связано с ячейкой, а не с данными.Метод getDataType()
объекта ячейки вернет 'f'
для формулы.
Если вы используете getCalculatedValue()
вместо getValue()
, тогда PHPExcel определит, содержит ли ячейка формулу или нет.Если это так, то он вычислит результат и вернет его, в противном случае он просто вернет то, что было бы возвращено getValue();
Другой метод, который вы могли бы рассмотреть, - это getFormattedValue()
, который вернет строку, отформатированную в соответствии с какиминабор для клетки.И если это была ячейка формулы, то она также выполнила бы расчет.Особенно полезно получать строку даты, а не числовое значение из ячеек, отформатированных как даты.
Вы также можете избежать зацикливания ячеек, используя методы toArray()
или rangeToArray()
, которые будут возвращать массивзначения ячеек, хотя вам все равно придется зацикливать массив.Оба этих метода имеют аргументы, позволяющие вам установить, следует ли рассчитывать формулы и применять ли форматирование.