我想将其中一列的日期列(作为字符串)格式化为另一种格式。
我找到的解决方案是使用withMapping
:
class ModelExcelExport implements FromCollection, WithColumnFormatting, withMapping
{
public function collection()
{
return Model::select('id','email','date')->get();
}
public function map($model): array
{
return [
$model->id,
$model->email,
\PhpOffice\PhpSpreadsheet\Shared\Date::stringToExcel($model->date),
];
}
public function columnFormats(): array
{
return [
'C' => NumberFormat::FORMAT_DATE_DDMMYYYY,
];
}
}
但要做到这一点,我必须Map所有的列,即使其中一些不需要任何格式。
在我的例子中,有更多的列(不像示例中那样只有3列),所以将每一列复制到map()
方法是很麻烦的,因为我需要一个列(date
列)以另一种格式。
当我只将date
列放在map()
中时,它将不起作用:
public function map($model): array
{
return [
\PhpOffice\PhpSpreadsheet\Shared\Date::stringToExcel($model->date)
];
}
1条答案
按热度按时间qij5mzcb1#
这可能不是最好的答案,但是为了Map单个列,您可以使用Laravel内置的集合Map方法