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