こんにちは。YOSHITAKA(@YOSHITA19704216)です。
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で形式を揃える方法についてお伝えしました。
実務で使う場合は参考にしてみてください。
※プログラミングは習得中ですので、参考程度に記事を読んでください。