LoginSignup
2
3

More than 1 year has passed since last update.

Laravel Excel エクスポートしたセルが折り返し表示しない、フォントを変えたい、見栄えを何とかしたい!

Posted at

Laravel Excelは、かゆい所に手が届く??

Laravel Excelのインストールの仕方や使い方については、いくつかのサイトを参考にして何とかなると思います。

問題は、デフォルトのスタイルが、使い道に意図したデザインにならないのを何とかしたい!
例えば。。。。
・フォント
・フォントサイズ
・文字の折り返し
・文字の詰め方向
・列幅

設定はこうしたらできた。使いたい機能は、implementsの後に、付け足して、それに関連するpublic functionを書いて行くと良い。

顧客リストをエクスポートする場合の例で

app/Exports/CompaniesExport.php
<?php

namespace App\Exports;

use Maatwebsite\Excel\Concerns\FromArray;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Maatwebsite\Excel\Concerns\WithColumnWidths;
use Maatwebsite\Excel\Concerns\WithDefaultStyles;
use Maatwebsite\Excel\Concerns\WithHeadings;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Style\Style;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;

class CompaniesExport implements FromArray, WithHeadings, WithDefaultStyles, ShouldAutoSize, WithColumnWidths
{
    protected $companies;

    /**
     * コントローラーからエクスポートする配列を受け取る
     */
    public function __construct(array $companies)
    {
        $this->companies = $companies;
    }

    /**
     * @return array
     */
    public function array(): array
    {
        return $this->companies;
    }

    /**
     * 1行目にヘッダーを入れる内容
     * @return array
     */
    public function headings(): array
    {
        return [
            'ID',
            '法人名',
            '郵便番号',
            '都道府県',
            '市区町村',
            '丁目・番地',
            'ビル名',
            '電話番号',
            'FAX番号'
        ];
    }

    /**
     * @param Worksheet $sheet
     * 列幅を数値で入れる
     * @return void
     */
    public function columnWidths(): array
    {
        return [
            'A'=>12,
            'B'=>25,
            'C'=>25,
            'D'=>12,
            'E'=>18,
            'F'=>12,
            'G'=>10,
            'H'=>25,
            'I'=>12,
        ];
    }

    /**
     * スタイルを設定する
     * @return array
     */
    public function defaultStyles(Style $defaultStyle)
    {
        // Or return the styles array
        return [
            'font' => [
                'name'   => 'MS PGothic',//MS P ゴシック
                'size' => 11,//フォントサイズ11px
            ],
            'alignment'=> [
                'horizontal' => Alignment::HORIZONTAL_LEFT,//左詰め
                'vertical' => Alignment::VERTICAL_TOP,//上詰め
                'wrapText' => true,//文字を折り返す
            ]
        ];
    }
}

コントローラーの方に書いているコードは以下の通り。

app/Http/Controllers/CompanyController.php(例)
        //ここまでに$companiesに配列を作る。
        $export = new CompaniesExport($companies);//←$companiesをCompaniesExportに渡している。
        return Excel::download($export, 'companies.xlsx', \Maatwebsite\Excel\Excel::XLSX);

*文字列の折り返しは、改行コードを使わずに、PHP_EOLを付け加える。
*CSVエクスポートを作ったものをEXCELに置き換えるので、私の場合は、全部配列をつくって出力する方式を使っています。

これで、およそ狙った通りのレイアウト出力する事が出来ると思います。
本家に、リファレンスがもっとたくさんあると嬉しいですが、無かったので、いろいろ調べてこうなりました。
参考になればとおもいます。

インストールの仕方や使い方の参考

本家
https://docs.laravel-excel.com/3.1/getting-started/
Laravel Excel 3.1 導入 + 使用例
https://qiita.com/y-oksaku/items/27fa2abc905527522262
Laravel Excelをマスターしよう
https://reffect.co.jp/laravel/laravel_excel_master
Laravel9でExcelファイルをインポート/エクスポートする方法【maatwebsite】
https://www.its-corp.co.jp/laravel9-excel-import-export/

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3