LaravelExcel3.1の列指定で小数点表示に統一する方法(フォーマットを指定する方法)

こんにちは。YOSHITAKA(@YOSHITA19704216)です。

初心者
Laravel Excelで出力した情報を小数点で統一して表示できますか?

よしたか
学んだことをアウトプットしていきます。

LaravelでCSVではなく、Excelファイルで出力したいけど全然記事がなくて困って、公式サイトを読んで解決したので、掲載しておきます。

この記事を読むことで
  • LaravelでExcel(エクセル)ファイルを出力するときに必要な設定がわかります。

Contents

Laravel Excel3,1で出力ファイルのカラムの小数点を揃える方法

LaravelにExcelを導入する方法がわからない人へ

今回はLaravel Excel(エクセル)が導入している状態から話をスタートさせていきます。

大前提
  • Laravel Excel3.1が導入されている状態にしておきましょう。

    今回の記事の大元は公式サイトを自分なりに読んで、進めていった内容となりますので、詳細は必ず公式サイトを見るようにしてください。また、あなたの目に届いている頃には掲載日が古くなっている可能性があります。新しいバージョンが出ている可能性もあるので、記事作成日を注目して、古い情報になっていないか確認してください。

    フォーマットの設定で参考にするのは、公式サイトになります。

    列全体を日付形式、数字形式、文字列形式、小数点形式にフォーマットする

    LaravelExcelでuse文を導入するときに必要なライブラリ

    「WithColumnFormatting」

    namespace App\Exports;
    
    use PhpOffice\PhpSpreadsheet\Shared\Date;
    use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
    use Maatwebsite\Excel\Concerns\WithColumnFormatting;
    use Maatwebsite\Excel\Concerns\WithMapping;
    
    class InvoicesExport implements WithColumnFormatting, WithMapping
    {
        public function map($invoice): array
        {
            return [
                $invoice->invoice_number,
                Date::dateTimeToExcel($invoice->created_at),
                $invoice->total
            ];
        }
        
        /**
         * @return array
         */
        public function columnFormats(): array
        {
            return [
                'B' => NumberFormat::FORMAT_DATE_DDMMYYYY,
                'C' => NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE,
            ];
        }
    }

    変更して変えることができるのは以下の部分

    • B列に「日付の形式」
    • C列に「お金の形式」が入っています。
        public function columnFormats(): array
        {
            return [
                'B' => NumberFormat::FORMAT_DATE_DDMMYYYY,
                'C' => NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE,
            ];
        }

     

    公式サイトはこの情報しかありません。

    そして、小数点を統一するための書き方(フォーマットの種類)がわからなくて断念する人が多いと思います。

    解決策 小数点を揃えるために変更する場所

    B列の形式を小数点にする場合は形式を以下のように変更します。

    今回はわかりやすいように一行だけ変更しました。

        public function columnFormats(): array
        {
            return [
                'B' => NumberFormat::FORMAT_NUMBER_00 = '0.00'; //小数点
    
            ];
        }

     

    変更できる場所(ファイル)について伝えておきます。

    補足

    ファイルは次の部分をホームディレクトリから探してください。

    vendor\phpoffice\phpspreadsheet\src\PhpSpreadsheet\Style\NumberFormat.php

     

    ファイルの場所と最初から搭載されている形式

    フォーマット形式には何があるのか詳しく知りたい場合は以下の抜粋を参照してください。

    以下は抜粋になります。

    必要な部分にはメモをつけています。

    <?php
    
    namespace PhpOffice\PhpSpreadsheet\Style;
    
    use PhpOffice\PhpSpreadsheet\Calculation\MathTrig;
    use PhpOffice\PhpSpreadsheet\Shared\Date;
    use PhpOffice\PhpSpreadsheet\Shared\StringHelper;
    
    class NumberFormat extends Supervisor
    {
        // Pre-defined formats 事前定義されたフォーマット
        const FORMAT_GENERAL = 'General';
    
      //文字列の細かい表示
        const FORMAT_TEXT = '@';
        
    
        //お金の細かい表示
        const FORMAT_NUMBER = '0';
        const FORMAT_NUMBER_00 = '0.00'; //小数点
        const FORMAT_NUMBER_COMMA_SEPARATED1 = '#,##0.00';
        const FORMAT_NUMBER_COMMA_SEPARATED2 = '#,##0.00_-'; 
    
        //%表示
        const FORMAT_PERCENTAGE = '0%';
        const FORMAT_PERCENTAGE_00 = '0.00%';
    
        //日付の設定
        const FORMAT_DATE_YYYYMMDD2 = 'yyyy-mm-dd';
        const FORMAT_DATE_YYYYMMDD = 'yyyy-mm-dd';
        const FORMAT_DATE_DDMMYYYY = 'dd/mm/yyyy';
        const FORMAT_DATE_DMYSLASH = 'd/m/yy';
        const FORMAT_DATE_DMYMINUS = 'd-m-yy';
        const FORMAT_DATE_DMMINUS = 'd-m';
        const FORMAT_DATE_MYMINUS = 'm-yy';
        const FORMAT_DATE_XLSX14 = 'mm-dd-yy';
        const FORMAT_DATE_XLSX15 = 'd-mmm-yy';
        const FORMAT_DATE_XLSX16 = 'd-mmm';
        const FORMAT_DATE_XLSX17 = 'mmm-yy';
        const FORMAT_DATE_XLSX22 = 'm/d/yy h:mm';
        const FORMAT_DATE_DATETIME = 'd/m/yy h:mm';
        const FORMAT_DATE_TIME1 = 'h:mm AM/PM';
        const FORMAT_DATE_TIME2 = 'h:mm:ss AM/PM';
        const FORMAT_DATE_TIME3 = 'h:mm';
        const FORMAT_DATE_TIME4 = 'h:mm:ss';
        const FORMAT_DATE_TIME5 = 'mm:ss';
        const FORMAT_DATE_TIME6 = 'h:mm:ss';
        const FORMAT_DATE_TIME7 = 'i:s.S';
        const FORMAT_DATE_TIME8 = 'h:mm:ss;@';
        const FORMAT_DATE_YYYYMMDDSLASH = 'yyyy/mm/dd;@';
    
        //お金の単位の変更
        const FORMAT_CURRENCY_USD_SIMPLE = '"$"#,##0.00_-';
        const FORMAT_CURRENCY_USD = '$#,##0_-';
        const FORMAT_CURRENCY_EUR_SIMPLE = '#,##0.00_-"€"';
        const FORMAT_CURRENCY_EUR = '#,##0_-"€"';
        const FORMAT_ACCOUNTING_USD = '_("$"* #,##0.00_);_("$"* \(#,##0.00\);_("$"* "-"??_);_(@_)';
        const FORMAT_ACCOUNTING_EUR = '_("€"* #,##0.00_);_("€"* \(#,##0.00\);_("€"* "-"??_);_(@_)';

     

    自分がLaravelでExcel(エクセル)でエクスポートするときには参考にしてみてください。

     

    まとめ

    今回はLaravelExcelで形式を揃える方法についてお伝えしました。

    実務で使う場合は参考にしてみてください。

    ※プログラミングは習得中ですので、参考程度に記事を読んでください。

    あなたは「Web集客」に限界を感じていませんか?

    サイトをただ作るだけで満足ですか?

    あなたのサービスやコンテンツはとっても有益なものがたくさんあります。

    良いコンテンツも埋もれてしまっては全く意味がありません。

    正しい知識と実践で、SEO対策はもちろん、ユーザビリティーを考えたサイトを作りませんか?

    私と歩めばWebマーケティング知識とWordPressスキルが定着し、サイト回遊率、再訪問がアップします。

    しかも、これだけでは終わりません!!

    その先の「攻めのメディア」と組み合わせ、あなたのサービスを広めて売上を伸ばしていきます。

    サイトを育てて、長い間愛されることのできるWordPressサイトからの集客導線(ゴールデンルート)を一緒に作りませんか?

    ↓ ↓ ↓ ↓ ↓ ↓ 

    おすすめの記事