PhpSpreadsheetでセル内の文字列の改行、セル幅の自動調整を行う方法
以前PHPとPhpSpreadsheetを用いてExcelシートを出力する方法をメモしたが、これに加えてセル内の文字列の改行、セル幅の自動調整を行いたかった。以下に対応方法をメモ。
目次
PhpSpreadsheet
公式サイト
https://phpspreadsheet.readthedocs.io/en/latest/
GitHub
https://github.com/PHPOffice/PhpSpreadsheet
ライブラリのインストール
サーバにSSH接続し、以下コマンドでインストールする。
composer require phpoffice/phpspreadsheet
対応方法
ソースコード
<?php require 'vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Reader\Xls as XlsReader; use PhpOffice\PhpSpreadsheet\Reader\Xlsx as Reader; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; use PhpOffice\PhpSpreadsheet\Style\NumberFormat; use PhpOffice\PhpSpreadsheet\Style\Border; use PhpOffice\PhpSpreadsheet\Style\Alignment; use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet; use PhpOffice\PhpSpreadsheet\Style\Color; use PhpOffice\PhpSpreadsheet\Style\Fill; //スプレッドシートを作成 $spreadsheet = new Spreadsheet(); //シート作成 $spreadsheet->getActiveSheet('sheet1')->UnFreezePane(); $sheet = $spreadsheet->getActiveSheet(); $sheet->setTitle("シート名"); //タイトルを設定 $sheet->setCellValue('A1', '名前'); $sheet->setCellValue('B1', '年齢'); $sheet->setCellValue('C1', 'プロフィール'); $data = array( 0 => array('山田', 20, 'プロフィール プロフィール1'), 1 => array('鈴木', 30, 'プロフィール プロフィール2プロフィール2'), 2 => array('佐藤', 40, 'プロフィール プロフィール3プロフィール3プロフィール3'), ); $sheet->fromArray($data, NULL, 'A2', true); //改行 $sheet->getStyle('C')->getAlignment()->setWrapText(true); //セル幅のリサイズ $dim = $sheet->getColumnDimension('C'); $dim->setAutoSize(true); $sheet->calculateColumnWidths(); $dim->setAutoSize(false); $cell_width = $dim->getWidth(); $dim->setWidth($cell_width * 1.2); //バッファをクリア ob_end_clean(); //ファイル名 $fileName = "test.xlsx"; //ダウンロード header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="'.$fileName.'"'); header('Cache-Control: max-age=0'); header('Cache-Control: max-age=1'); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); header('Cache-Control: cache, must-revalidate'); header('Pragma: public'); $writer = new Xlsx($spreadsheet); $writer->save('php://output'); exit();
出力例
改行&セル幅のリサイズを行った場合と行わなかった場合の出力例は以下の通り。
改行&セル幅のリサイズあり
改行&セル幅のリサイズなし
参考サイト
関連記事
-
-
PhpSpreadsheetで作成したエクセルファイルをPDFファイルに変換する方法
以前にPhpSpreadsheetでフォーマット用のエクセルを読み込み、指定した ...
-
-
PhpSpreadsheetでフォーマット用のエクセルを読み込み、指定したセルにデータを書き込んだ上で別名で保存する方法
PHPで納品書等のフォーマット用のExcelを読み込み、指定したセルにデータを書 ...
-
-
PHPでExcelシートを出力する方法(PhpSpreadsheet)
PHPでエクセルシートを出力させたい。以前はPHPExcelを利用していたが現在 ...