PHP
Excel
Laravel
XLSX
PhpSpreadsheet

PhpSpreadsheetでセル内改行する

PhpSpreadSheetでExcelファイルを出力する際、セル内改行が必要な場面に遭遇。

とりあえず\nを織り交ぜてみたが、半角スペースみたいなスペースが空くのみで改行されず。

色々試した結果、以下のような記述で実装可能。


hoge.php

require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Reader\Xlsx as XlsxReader;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx as XlsxWriter;


hoge.php

$spreadsheet = new Spreadsheet();

$sheet = $spreadsheet->getActiveSheet();

//セル内改行指定
$sheet->getStyle('A1:C3')->getAlignment()->setWrapText(true);
$sheet->setCellValue("A1","hello\nhello\n");
$sheet->setCellValue("B2","hello\nhello\n");
$sheet->setCellValue("C3","hello\nhello\n");

$writer = new XlsxWriter($spreadsheet);
$fileName = 'test.xlsx';
header("Content-Description: File Transfer");
header('Content-Disposition: attachment; filename="'.$fileName.'"');
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Expires: 0');
ob_end_clean();
$writer->save('php://output');


getStyle('A1:C3') のところだけ書き換えればOKですね。

【追記】

DLしたファイルが「破損している」的なことを言われる時は、最後の行に


hoge.php

$writer->save('php://output');

exit;

と、exit; を入れてみて下さい。