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

时间:2018-10-30 03:28:08

标签: php phpoffice

我无法为尚未属于电子表格对象的工作表对象中的单元格设置样式。这可能吗?使用getStyle()方法似乎无法实现,因为此方法调用父电子表格中的函数。也许还有另一种方法?

工作表类:

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

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

当执行something()时,将导致null异常时产生setActiveSheetIndex()。

1 个答案:

答案 0 :(得分: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(),
    ],
]);

OR

直接在电子表格上

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