我正在使用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'],
];
}
}
获取单元格并更改格式,如下:
$time = $collection->get('Time');
$time = date('h:i:s a', strtotime($time));
$item->set('time', strtotime($time));