将所有文本置于PHPSpreadsheet中,并使单元格扩展以填充上下文

时间:2018-08-29 06:23:43

标签: php spreadsheet styling phpspreadsheet

我很难使所有单元格都将上下文设置为居中并自动扩展,以使其不会相互重叠。

所以我想做的是:

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

  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个命令在所有单元格上都做。

3 个答案:

答案 0 :(得分:3)

这可以解决问题:

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

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

注意

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

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

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

关于设置单元格的值,我希望您将其与格式化和样式设置无关,只是为了分离关注点和可读性。

干杯。

答案 1 :(得分:0)

要自动调整一定范围的列:

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"

答案 2 :(得分:0)

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

由于$sheet->getStyle('A:B')不能与我一起工作,所以这里是另一种选择。

 $lastColumn = $sheet->getHighestColumn();
 $lastRow = $sheet->getHighestRow();
 $sheet->getStyle("A1:$lastColumn$lastRow")->applyFromArray($styleArray); // "A1:$lastColumn$lastRow" this is basically means apply style from the first cell to last cell (last column)
  1. 使单元格根据单元格中的文本数量进行扩展。我不希望A中的信息在B单元格中遍历。
$sheet->getColumnDimension('B')->setAutoSize(true);

您还可以循环显示列,并将自动调整大小应用于每个列。