将 PHPSpreadsheet 中的所有文本居中并使单元格扩展以填充上下文
Center all text in PHPSpreadsheet and make the cells expand to fill up with context
我努力让所有单元格将上下文设置为居中并自动扩展,这样它们就不会相互重叠。
所以我尝试做的是:
将每个单元格中的信息设置为居中,因为这样可以更好地打印到 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 个命令在我的所有单元格上执行这两项操作。
这样做就可以了:
要自动调整大小(单元格自动扩展),请执行以下操作:
$sheet->getColumnDimension('A')->setAutoSize(true);
$sheet->getColumnDimension('B')->setAutoSize(true);
注意
您必须为每一列单独执行此操作,因为 getColumnDimension
方法只能接受一列作为参数。
你已经知道了水平对齐方式,但值得注意的是,你可以使用一条命令设置多列的对齐方式。
$sheet->getStyle('A:B')->getAlignment()->setHorizontal('center');
至于设置单元格值,我希望您将其与与格式和样式相关的任何事情分开进行,只是为了分离关注点和提高可读性。
干杯。
自动调整一系列列的大小:
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"
- Set the info in every cell to be centered since it makes better for printing to 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)
- Make the cells expand based on how much text there is in the cell. I dont want the the information in A to go over in cell B.
$sheet->getColumnDimension('B')->setAutoSize(true);
您还可以在列上循环并对每一列应用自动调整大小。
我努力让所有单元格将上下文设置为居中并自动扩展,这样它们就不会相互重叠。
所以我尝试做的是:
将每个单元格中的信息设置为居中,因为这样可以更好地打印到 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 个命令在我的所有单元格上执行这两项操作。
这样做就可以了:
要自动调整大小(单元格自动扩展),请执行以下操作:
$sheet->getColumnDimension('A')->setAutoSize(true);
$sheet->getColumnDimension('B')->setAutoSize(true);
注意
您必须为每一列单独执行此操作,因为 getColumnDimension
方法只能接受一列作为参数。
你已经知道了水平对齐方式,但值得注意的是,你可以使用一条命令设置多列的对齐方式。
$sheet->getStyle('A:B')->getAlignment()->setHorizontal('center');
至于设置单元格值,我希望您将其与与格式和样式相关的任何事情分开进行,只是为了分离关注点和提高可读性。
干杯。
自动调整一系列列的大小:
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"
- Set the info in every cell to be centered since it makes better for printing to 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)
- Make the cells expand based on how much text there is in the cell. I dont want the the information in A to go over in cell B.
$sheet->getColumnDimension('B')->setAutoSize(true);
您还可以在列上循环并对每一列应用自动调整大小。