如何在 laravel 上传 excel 中使用时间格式 excel 单元格?

How to use time format excel cell in laravel uploaded excel?

我正在使用 laravel 软件包 maatwebsite/excel 版本 3.1 进行 excel 文件上传。

   $collection = Excel::toCollection(new UsersImport, storage_path('app/' . $newFile));

我上传了一个单元格格式为时间的文件。

这里的时间和时间单元格有时间格式。 当我上传这个文件时,结果输出是:

在生成的输出时间和超时单元格中,数据被转换为字符串。 如何防止它转换或如何将它从文本更改为时间?

您需要手动转换它们或使用映射器。

可以使用内置函数转换其中一个日期,如下例所示:

\PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($collection->first()[4])

我觉得你也可以用Carbon

Carbon::parse($collection->first()[4])

如果您使用映射器,您可以事先定义它,不用担心。

https://docs.laravel-excel.com/3.1/imports/mapped-cells.html

namespace App\Imports;

use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithMappedCells;
use PhpOffice\PhpSpreadsheet\Shared\Date;

new Import implements WithMappedCells, ToModel 
{
public function mapping(): array
{
    return [
        'timecellA'  => 'A5',
        'timecellB' => 'A6',
        'timecellC' => 'A7',
        'timecellD' => 'A8',

    ];
}

public function model(array $row)
{
    return [
         'timecellA'  => Date::excelToDateTimeObject($row['timecellA'],
         'timecellB'  => Date::excelToDateTimeObject($row['timecellB'],
         'timecellC'  => Date::excelToDateTimeObject($row['timecellC'],
         'timecellD'  => Date::excelToDateTimeObject($row['timecellD'],
    ];
}
}