我很难使所有单元格都将上下文设置为居中并自动扩展,以使其不会相互重叠。
所以我想做的是:
将每个单元格中的信息设置为居中,因为这样可以更好地打印到PDF / etc。
根据单元格中的文本数量来使单元格扩展。我不希望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个命令在所有单元格上都做。
答案 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)
- 将每个单元格中的信息设置为居中,因为这样可以更好地打印到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)
- 使单元格根据单元格中的文本数量进行扩展。我不希望A中的信息在B单元格中遍历。
$sheet->getColumnDimension('B')->setAutoSize(true);
您还可以循环显示列,并将自动调整大小应用于每个列。