web-dev-qa-db-ja.com

すべてのテキストをPHPSpreadsheetの中央に配置し、セルを展開してコンテキストでいっぱいにします

すべてのセルがコンテキストを中央に設定し、自動展開して互いに重なり合わないようにするのに少し苦労します。

だから私がやろうとしていることは:

  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つのコマンドだけですべてのセルで両方を実行したいと思います。

6
stAMy

これはトリックを行います:

自動サイズ調整(セルの自動拡張)を行うには、次を実行します。

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

[〜#〜] note [〜#〜]

getColumnDimensionメソッドはパラメーターとして1列のみを受け入れることができるため、列ごとに個別にこれを行う必要があります。

水平方向の配置は既にわかっていますが、1つのコマンドを使用して複数の列の配置を設定できることに注意してください。

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

セルの値の設定に関しては、懸念と読みやすさの分離のためだけに、フォーマットとスタイリングに関係するものとは別に行うことをお勧めします。

乾杯。

9

一定範囲の列を自動サイズ調整する場合:

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"
0
Adem Tepe