Столкнулся сегодня с проблемой при использовании библиотеки PHPExcel.
Версия на данный момент 1.7.9.
Проблема в следующем: при чтении заранее приготовленного шаблона, записи некоторых данных и последующем сохранении файла для отправки пользователю, обнаружилось, что в сохраненном файле теряется «скрытость» строк и столбцов. В шаблоне строки скрыты — в конечном файле они же не скрыты.
У меня шаблон мерками PHPExcel относится к типу Excel2007.
Исходя из этого мне пришлось проверять класс PHPExcel_Reader_Excel2007.
Поиски места с ошибкой привели меня к следующему коду:
На первый взгляд все верно.
Идем дальше:
Тоже все выглядит на первый взгляд правильно.
Вот только данная функция при проверке if (self::boolean($col[«hidden»])) всегда возвращала FALSE.
А все от того, что $col[«hidden»] имеет тип SimpleXMLElemen.
И хоть
Не долго думая, я написал вот так:
Задача решена, остальные части библиотеки изменение не заметили. На чем и заканчиваю свой пост.
Версия на данный момент 1.7.9.
Проблема в следующем: при чтении заранее приготовленного шаблона, записи некоторых данных и последующем сохранении файла для отправки пользователю, обнаружилось, что в сохраненном файле теряется «скрытость» строк и столбцов. В шаблоне строки скрыты — в конечном файле они же не скрыты.
У меня шаблон мерками PHPExcel относится к типу Excel2007.
Исходя из этого мне пришлось проверять класс PHPExcel_Reader_Excel2007.
Поиски места с ошибкой привели меня к следующему коду:
if (self::boolean($col["hidden"])) {
$docSheet->getColumnDimension(PHPExcel_Cell::stringFromColumnIndex($i))->setVisible(FALSE);
}
На первый взгляд все верно.
Идем дальше:
private static function boolean($value = NULL)
{
if (is_numeric($value)) {
return (bool) $value;
}
return ($value === 'true' || $value === 'TRUE') ? TRUE : FALSE;
}
Тоже все выглядит на первый взгляд правильно.
Вот только данная функция при проверке if (self::boolean($col[«hidden»])) всегда возвращала FALSE.
А все от того, что $col[«hidden»] имеет тип SimpleXMLElemen.
И хоть
echo $col["hidden"];
выдаст на экране 1, но is_numeric($value);
вернет FALSE.Не долго думая, я написал вот так:
private static function boolean($value = NULL)
{
if (is_numeric($value)) {
return (bool) $value;
}
return ($value === 'true' || $value === 'TRUE' || $value === '1') ? TRUE : FALSE;
}
Задача решена, остальные части библиотеки изменение не заметили. На чем и заканчиваю свой пост.