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

问题描述 投票:0回答:2

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

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

我已经上传了一个文件,其中单元格的格式是时间。enter image description here

这里超时和超时单元格具有时间格式。当我上传此文件时,结果输出为:enter image description here

导致单元格中的输出超时和超时数据转换为字符串。如何防止此转换或如何将其从文本更改为时间?

php excel laravel maatwebsite-excel
2个回答
0
投票

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

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

\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'],
    ];
}
}

0
投票

获取单元格并更改格式,如下:

 $time = $collection->get('Time');
 $time = date('h:i:s a', strtotime($time));
 $item->set('time', strtotime($time));
© www.soinside.com 2019 - 2024. All rights reserved.