PHPOffice\Excel 没有电子表格对象的工作表样式

PHPOffice\Excel Styling Worksheet without a Spreadsheet Object

我在为尚不属于电子表格对象的工作表对象中的单元格设置样式时遇到问题。这可能吗?使用 getStyle() 方法似乎不可能,因为此方法调用父电子表格中的函数。也许还有其他方法?

工作表class:

    class MyWorksheet extends \PHPOffice\PHPSpreadsheet\Worksheet\Worksheet {

        public function something() {
            $this->setCellValue('A1', 'Something');
            $this->getStyle('A1')->ApplyFromArray([
                'font' => ['bold' => true]
            ]);
         } 
    }

执行 something() 时会导致 setActiveSheetIndex() on null 异常。

正在格式化单元格

可以使用字体、边框、填充...样式信息来格式化单元格。例如,可以将单元格的前景色设置为红色,右对齐,边框设置为黑色和粗边框样式。

一些示例:

$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/