LaravelとMaatwebsite\Excelでビューを利用してエクセルに出力する基本的な方法と、エクセルの印刷範囲および余白、「シートを1ページに印刷」を設定する方法を以下に説明します。
具体的には、モデルからデータを取得し、ビューを通してそれを整形し、エクセルで出力します。
モデルの作成
User モデルを使用すると仮定して進めます。あなたのプロジェクトに合わせてデータを取得する方法を調整してください。
ビューの作成
エクセルに出力するためのビューを作成します。
ここでは、resources/views/export/users.blade.php を作成してみましょう。
<!-- resources/views/export/users.blade.php -->
<table>
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Email</th>
</tr>
</thead>
<tbody>
@foreach($users as $user)
<tr>
<td>{{ $user->id }}</td>
<td>{{ $user->name }}</td>
<td>{{ $user->email }}</td>
</tr>
@endforeach
</tbody>
</table>
エクスポートクラスの作成:セル印刷範囲と余白を設定し1ページに印刷
ビューとモデルを利用してエクセルファイルを作成するエクスポートクラスを作ります。
namespace App\Exports;
use App\User;
use Illuminate\Contracts\View\View;
use Maatwebsite\Excel\Concerns\FromView;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Events\AfterSheet;
class UsersExport implements FromView, WithEvents
{
public function view(): View
{
return view('export.users', [
'users' => User::all()
]);
}
public function registerEvents(): array
{
return [
AfterSheet::class => function(AfterSheet $event) {
$sheet = $event->sheet->getDelegate();
// 以下のコードで、「シートを1ページに印刷」の設定を行います。
$sheet->getPageSetup()
->setPrintArea('A1:E10'); //印刷範囲をA1からE10までに設定
->setFitToWidth(1) // 1ページの幅に合わせる
->setFitToHeight(1); // 1ページの高さに合わせる
$sheet->getPageMargins() //以下上、右、左、下の余白をそれぞれ設定
->setTop(0.75)
->setRight(0.7)
->setLeft(0.7)
->setBottom(0.75);
},
];
}
}
- setPrintArea(‘A1:E10’) – これによって印刷範囲をA1からE10までに設定しています。
- setFitToWidth(1) と setFitToHeight(1)を利用して、印刷時にシートの内容が1ページに収まるように設定しています。
通常、これらのメソッドに指定した値がシートの幅または高さに対して何ページ分かを表します。両方に 1 を設定することで、エクセルの印刷オプションが「シートを1ページに印刷」に設定されます。 - getPageMargins()->setTop(0.75)->setRight(0.7)->setLeft(0.7)->setBottom(0.75); – これによって上、右、左、下の余白をそれぞれ設定しています(数値はインチ単位です)。
上記の方法は、後のバージョンのPhpSpreadsheetライブラリとMaatwebsiteのバージョン3.xに基づいています。
異なるバージョンを使用している場合、または未来のバージョンで変更があった場合、詳細は公式ドキュメントを確認してください。
コントローラの作成
次に、作成したエクスポートクラスを利用してエクセルをダウンロードするコントローラを作成します。
namespace App\Http\Controllers;
use App\Exports\UsersExport;
use Maatwebsite\Excel\Facades\Excel;
class UsersController extends Controller
{
public function export()
{
return Excel::download(new UsersExport, 'users.xlsx');
}
}
ルーティングの設定
最後に、routes/web.phpにルートを追加して、コントローラのメソッドを指定します。
use App\Http\Controllers\UsersController;
Route::get('users/export', [UsersController::class, 'export']);
この設定を行うことで、/users/exportへのリクエストはUsersControllerのexportメソッドをトリガーし、エクスポートクラスを通してエクセルが出力され、ダウンロードされます。印刷範囲と余白はエクスポートクラス内で設定されています。
※流用される場合は自己責任でお願いします。