PHPOffice\Excel Styling Worksheet без объекта электронной таблицы
У меня проблемы с оформлением ячеек в объекте листа, который еще не принадлежит объекту электронной таблицы. Это возможно? Это кажется невозможным с помощью метода getStyle(), так как этот метод вызывает функции в родительской электронной таблице. Может есть другой способ?
Класс рабочего листа:
class MyWorksheet extends \PHPOffice\PHPSpreadsheet\Worksheet\Worksheet {
public function something() {
$this->setCellValue('A1', 'Something');
$this->getStyle('A1')->ApplyFromArray([
'font' => ['bold' => true]
]);
}
}
Когда что-то () выполняется, это приводит к setActiveSheetIndex() с нулевым исключением.
1 ответ
Форматирование ячеек
Ячейка может быть отформатирована с помощью шрифта, рамки, заливки,... стиля информации. Например, можно установить цвет переднего плана ячейки на красный, выровненный вправо, а границу - на стиль черной и толстой рамок.
Некоторые примеры:
$spreadsheet->getActiveSheet()->getStyle('B3:B7')->getFill()
->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)
->getStartColor()->setARGB('FFFF0000');
На рабочем листе (ваш случай)
$worksheet->getParent()->getDefaultStyle()->applyFromArray([
'font' => [
'name' => $pValue->getFont()->getName(),
'size' => $pValue->getFont()->getSize(),
],
]);
ИЛИ ЖЕ
Прямо на электронную таблицу
$styleArray = [
'font' => [
'bold' => true,
],
'alignment' => [
'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_RIGHT,
],
'borders' => [
'top' => [
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
],
],
'fill' => [
'fillType' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_GRADIENT_LINEAR,
'rotation' => 90,
'startColor' => [
'argb' => 'FFA0A0A0',
],
'endColor' => [
'argb' => 'FFFFFFFF',
],
],
];
$spreadsheet->getActiveSheet()->getStyle('A3')->applyFromArray($styleArray);
https://phpspreadsheet.readthedocs.io/en/develop/topics/recipes/