在 PHPSpreadsheet 中居中所有文本,并使单元格展开以填充上下文

2022-08-31 00:26:54

我有点努力让所有单元格将上下文设置为居中并自动展开,以便它不会相互重叠。

所以我试图做的是:

  1. 将每个单元格中的信息设置为居中,因为它可以更好地打印到PDF /等。

  2. 根据单元格中的文本量使单元格扩展。我不希望A中的信息在单元格B中出现。

我尝试了这段代码,但它似乎不起作用:

$styleArray = array(
            'borders' => array(
                'outline' => array(
                    'style' => Alignment::HORIZONTAL_CENTER,
                ),
            ),
        );

        $sheet ->getStyle('A1:D30')->applyFromArray($styleArray);

如果我为一个单元格(中心上下文)执行此操作,则有效。是这样的吗:

$sheet->setCellValue('A2', $activitiesCount)->getStyle('A2')->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER);

对于正在扩张的细胞,我还没有找到一个解决方案来尝试。

如果可能的话,我很乐意在我的所有单元上只用1个命令来做这两件事。


答案 1

这将解决问题:

对于自动调整大小(单元自动扩展),请执行以下操作:

$sheet->getColumnDimension('A')->setAutoSize(true);
$sheet->getColumnDimension('B')->setAutoSize(true);

注意

您必须为每个列单独执行此操作,因为该方法只能接受一列作为其参数。getColumnDimension

您已经弄清楚了水平对齐方式,但值得注意的是,您可以使用一个命令设置多个列的对齐方式。

$sheet->getStyle('A:B')->getAlignment()->setHorizontal('center');

至于设置单元格值,我宁愿您将其与与格式和样式相关的任何内容分开进行,只是为了分离关注点和可读性。

干杯。


答案 2

对于自动调整列范围的大小:

foreach(range('A','Z') as $columnID) {
    $sheet->getColumnDimension($columnID)->setAutoSize(true);
}

将每个单元格中的信息设置为居中:

$alignment_center = \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER;

foreach($sheet->getRowIterator() as $row) {
    foreach($row->getCellIterator() as $cell) {
        $cellCoordinate = $cell->getCoordinate();
        $sheet->getStyle($cellCoordinate)->getAlignment()->setHorizontal($alignment_center);
    }
}

这些适用于:

"phpoffice/phpspreadsheet": "^1.6"

推荐