【问题标题】:Center all text in PHPSpreadsheet and make the cells expand to fill up with context将 PHPSpreadsheet 中的所有文本居中并使单元格扩展以填充上下文
【发布时间】:2019-02-03 20:20:53
【问题描述】:

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

所以我尝试做的是:

  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 个命令在我的所有单元格上同时执行这两项操作。

【问题讨论】:

    标签: php spreadsheet styling phpspreadsheet


    【解决方案1】:

    这样就可以了:

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

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

    注意

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

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

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

    至于设置单元格值,我希望您将其与与格式和样式有关的任何事情分开进行,只是为了分离关注点和可读性。

    干杯。

    【讨论】:

    • 谢谢!这似乎有效。我唯一能指出的是 $sheet->getStyle('A:B')->getAlignment()->setHorizo​​ntal('center');似乎没有按预期工作,但如果我以“A1:A10”为例,那么它适用于 A1-A10。 'A:B' 似乎不被接受。
    • 酷...虽然$sheet->getStyle('A:B')->getAlignment()->setHorizontal('center'); 对我有用。我正在使用version 1.4;... 你呢?
    • 在我的 composer.lock 文件中它说 phpoffice/phpspreadsheet: 1.0... 也许这就是原因。认为它会随着作曲家更新而更新。谢谢!
    • 请注意,这不适用于 ods 文件...您知道解决此问题的方法吗?谢谢。
    【解决方案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"
    

    【讨论】:

      【解决方案3】:
      1. 将每个单元格中的信息设置为居中,因为这样可以更好地打印到 PDF/等。

      由于$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);
      

      您还可以在列上循环并对每一列应用自动调整大小。

      【讨论】:

        猜你喜欢
        • 2021-10-31
        • 1970-01-01
        • 2014-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-21
        • 2017-07-04
        • 1970-01-01
        相关资源
        最近更新 更多