В общем дело происходило вот так
$Sheet->getStyle('A5:E9')->getBorders()
->getAllBorders()
->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
Но я перенес свой проектик с php5.4 на 7.1 и у меня очень много ошибок начало вылазить, не долго думая, решил обновить PHPExcel 1.7.6 -> 1.8, после обновления, у меня перестали применяться стили к границам ячеек.
Ну я залез в файл PHPExcel/Style/Border.php
и на 141 строке нашел функцию getStyleArray
public function getStyleArray($array)
{
switch ($this->parentPropertyName) {
case 'allBorders':
case 'bottom':
case 'diagonal':
case 'horizontal':
case 'inside':
case 'left':
case 'outline':
case 'right':
case 'top':
case 'vertical':
$key = strtolower('vertical');
break;
}
return $this->parent->getStyleArray(array($key => $array));
}
Смешно, да?
При любом положении bottom, diagonal... у нас будет vertical.
Теперь обратимся к более ранней версии этой функции (1.7.6)
public function getStyleArray($array)
{
switch ($this->_parentPropertyName) {
case '_allBorders':
$key = 'allborders';
break;
case '_bottom':
$key = 'bottom';
break;
case '_diagonal':
$key = 'diagonal';
break;
case '_horizontal':
$key = 'horizontal';
break;
case '_inside':
$key = 'inside';
break;
case '_left':
$key = 'left';
break;
case '_outline':
$key = 'outline';
break;
case '_right':
$key = 'right';
break;
case '_top':
$key = 'top';
break;
case '_vertical':
$key = 'vertical';
break;
}
return $this->_parent->getStyleArray(array($key => $array));
}
Т.е. в старой версии к нам приходили значения с префиксом _, а на выходе без префикса, в новой версии библиотеки перепилили всё и входные стали без префикса, но разработчики немного были невнимательными и хотели сказать что-то вроде такого:
public function getStyleArray($array)
{
switch ($this->parentPropertyName) {
case 'allBorders':
case 'bottom':
case 'diagonal':
case 'horizontal':
case 'inside':
case 'left':
case 'outline':
case 'right':
case 'top':
case 'vertical':
$key = strtolower($this->parentPropertyName);
break;
}
return $this->parent->getStyleArray(array($key => $array));
}
После этого всё заработало, ура!!! Сейчас попробуем отправить разработчикам патч, хоть проект и закопали, но кому-то он еще нужен, у кого-то используется и пусть он живет за счет тех, кто это вообще использует.
$Sheet->getStyle('A5:E9')->getBorders()
->getAllBorders()
->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
Но я перенес свой проектик с php5.4 на 7.1 и у меня очень много ошибок начало вылазить, не долго думая, решил обновить PHPExcel 1.7.6 -> 1.8, после обновления, у меня перестали применяться стили к границам ячеек.
Ну я залез в файл PHPExcel/Style/Border.php
и на 141 строке нашел функцию getStyleArray
public function getStyleArray($array)
{
switch ($this->parentPropertyName) {
case 'allBorders':
case 'bottom':
case 'diagonal':
case 'horizontal':
case 'inside':
case 'left':
case 'outline':
case 'right':
case 'top':
case 'vertical':
$key = strtolower('vertical');
break;
}
return $this->parent->getStyleArray(array($key => $array));
}
Смешно, да?
При любом положении bottom, diagonal... у нас будет vertical.
Теперь обратимся к более ранней версии этой функции (1.7.6)
public function getStyleArray($array)
{
switch ($this->_parentPropertyName) {
case '_allBorders':
$key = 'allborders';
break;
case '_bottom':
$key = 'bottom';
break;
case '_diagonal':
$key = 'diagonal';
break;
case '_horizontal':
$key = 'horizontal';
break;
case '_inside':
$key = 'inside';
break;
case '_left':
$key = 'left';
break;
case '_outline':
$key = 'outline';
break;
case '_right':
$key = 'right';
break;
case '_top':
$key = 'top';
break;
case '_vertical':
$key = 'vertical';
break;
}
return $this->_parent->getStyleArray(array($key => $array));
}
Т.е. в старой версии к нам приходили значения с префиксом _, а на выходе без префикса, в новой версии библиотеки перепилили всё и входные стали без префикса, но разработчики немного были невнимательными и хотели сказать что-то вроде такого:
public function getStyleArray($array)
{
switch ($this->parentPropertyName) {
case 'allBorders':
case 'bottom':
case 'diagonal':
case 'horizontal':
case 'inside':
case 'left':
case 'outline':
case 'right':
case 'top':
case 'vertical':
$key = strtolower($this->parentPropertyName);
break;
}
return $this->parent->getStyleArray(array($key => $array));
}
После этого всё заработало, ура!!! Сейчас попробуем отправить разработчикам патч, хоть проект и закопали, но кому-то он еще нужен, у кого-то используется и пусть он живет за счет тех, кто это вообще использует.
1 комментарий:
Большое спасибо! Помогли
Отправить комментарий