使用PhpSpreadsheet,如何为整个工作表(不是整个电子表格)设置样式

问题描述 投票:0回答:2

使用 PhpSpreadsheet 我想获取(或设置)整个工作表(而不是整个电子表格)的样式 我知道对整个电子表格执行此操作的语法

$spreadsheet->getDefaultStyle()->getFont()->setSize(100);

对于单个细胞

$spreadsheet->getActiveSheet()->getStyle('A1')->getFont()->setSize(100);

但是整张纸的相同功能失败了

$spreadsheet->getActiveSheet()->getStyle()->getFont()->setSize(100);

设置整个工作表样式的正确语法是什么?

phpspreadsheet
2个回答
1
投票

我还想为整个活动工作表设置样式。 快速查看代码后,我认为目前没有这种可能性。 我最终利用了实施的“转换检查”:

// Convert '1:3' to 'A1:XFD3'
$coordinate = self::pregReplace('/^(\d+):(\d+)$/', 'A${1}:XFD${2}', $coordinate);

由于我在写入单元格时已经在计算行数,因此我最终调用了例如:

$spreadsheet->getActiveSheet()->getStyle("1:$row")->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_TOP);

还有一些其他的“转换检查”可以派上用场:

// Convert 'A' to 'A:A'
$coordinate = self::pregReplace('/^([A-Z]+)$/', '${1}:${1}', $coordinate);

// Convert '1' to '1:1'
$coordinate = self::pregReplace('/^(\d+)$/', '${1}:${1}', $coordinate);

// Convert 'A:C' to 'A1:C1048576'
$coordinate = self::pregReplace('/^([A-Z]+):([A-Z]+)$/', '${1}1:${2}1048576', $coordinate);

0
投票

对我有用的是使用

$sheet->calculateWorksheetDimension();

它返回一个字符串,您可以使用它来获取包含整个工作表的范围。 像这样,使用原始示例:

$range = $sheet->calculateWorksheetDimension();
$spreadsheet->getActiveSheet()->getStyle($range)->getFont()->setSize(100);

注意:我使用的是 LaravelExcel(这是 Laravel PHPSpreadsheet 实现),但该方法存在于原始库中,如下所示: https://phpoffice.github.io/PhpSpreadsheet/classes/PhpOffice-PhpSpreadsheet-Worksheet-Worksheet.html#method_calculateWorksheetDimension

© www.soinside.com 2019 - 2024. All rights reserved.