PHPExcel границы переопределяются?

У меня есть класс, который создает документ PHPExcel. Ниже приведены стили, которые я использую. Надеюсь, они достаточно очевидны из их имен.

private $default_style = array(
'font' => array(
'name' => 'Verdana',
'color' => array('rgb' => '000000'),
'size' => 11
),
'alignment' => array(
'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER
),
'borders' => array(
'allborders' => array(
'style' => PHPExcel_Style_Border::BORDER_THIN,
'color' => array('rgb' => 'AAAAAA')
)
)
);

private $title_style = array(
'font' => array(
'bold' => true
),
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_SOLID,
'startcolor' => array('rgb' => '5CACEE')
),
'alignment' => array(
'wrap' => true
),
'borders' => array(
'allborders' => array(
'style' => PHPExcel_Style_Border::BORDER_THIN,
'color' => array('rgb' => 'AAAAAA')
)
)
);


private $new_swap_style = array(
'font' => array(
'bold' => true
),
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_SOLID,
'startcolor' => array('rgb' => 'F9690E')
),
'alignment' => array(
'wrap' => true
),
'borders' => array(
'allborders' => array(
'style' => PHPExcel_Style_Border::BORDER_THIN,
'color' => array('rgb' => 'AAAAAA')
)
)
);

private $odd_row_style = array(
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_SOLID,
'startcolor' => array('rgb' => 'CCCCCC')
),
'borders' => array(
'allborders' => array(
'style' => PHPExcel_Style_Border::BORDER_THIN,
'color' => array('rgb' => 'AAAAAA')
)
)
);

private $outline_border = array(
'borders' => array(
'outline' => array(
'style' => PHPExcel_Style_Border::BORDER_THICK,
'color' => array('rgb' => '676767')
)
)
);

private $right_border = array(
'borders' => array(
'right' => array(
'style' => PHPExcel_Style_Border::BORDER_THICK,
'color' => array('rgb' => '676767')
)
)
);

Я применяю odd_row_style используя этот кусок кода:

if ($key % 2 != 0) {
$as->getStyle('A'.$row.':'.$last_col.$row)
->applyFromArray($this->odd_row_style);
}

Кроме этого, единственными другими стилями, которые я применяю, являются outline_border а также right_border стили. Они применяются в конце данных, которые я перебираю, следующим образом:

// $row equals the last row after the data is looped through
$as->getStyle('D3:H'.($row))->applyFromArray($this->outline_border);
$as->getStyle('E3:E'.($row))->applyFromArray($this->right_border);

По какой-то причине граница в default_style переопределяется, но применяется снова, когда я добавляю outline_border а также right_border стили.

Это более очевидно видно на скриншоте в строках 10 и 11. Вы можете видеть, что между ними нет границы, поэтому серые ряды сливаются воедино. Тем не менее, граница применяется правильно под заголовком «Новый» в тех же строках.

введите описание изображения здесь

Я пытался добавить default_style снова прямо перед добавлением outline_border а также right_border стили без удачи.

Заранее благодарю за любую помощь!

Я понял, что когда я установил odd_row_style к строке, заливка цветов ячейки переопределяет границы, хотя я снова включил границы по умолчанию. Кажется, это делается независимо от того, имеет ли ячейка значение. См. Ячейки F10: G11 (значения) и A10: C11 (без значений) на рисунке выше.

Еще страннее, когда я подал заявку default_style на весь лист цвета границы были #c1c1c1 для всего, а не #aaaaaa как я пытался установить их.

Это сводит меня с ума, если кто-то может, пожалуйста, помогите!

1

Решение

По некоторым причинам, установка стиля границы с помощью ->getDefaultStyle()->applyFromArray() методы выбросили все из-под контроля для меня. Если я установлю клетки явно, используя ->getStyle()->applyFromArray() введя одну или несколько ячеек, он работает как положено. Я не уверен, является ли это ожидаемым результатом или ошибкой, но я открыл проблему на их github. Не стесняйтесь отслеживать это Вот.

0

Другие решения

Других решений пока нет …