У меня есть электронная таблица, которую я хочу прочитать, чтобы получить значения в моей базе данных, но при проверке с помощью var_dump () каждая строка считывается как NULL.Файл Excel представляет собой XLSX.
Что-то странное в этой электронной таблице состоит в том, что она начинается в строке 11, но мне нужно получить некоторые значения, которые указаны выше, как «сопоставленные ячейки».
class ActaImport implements ToCollection, WithStartRow,
WithMappedCells
{
public function mapping(): array
{
return [
'fecha' => 'G2',
'guia' => 'G3',
];
}
/**
* @param Collection $rows
*
* @return \Illuminate\Database\Eloquent\Model|null
*/
public function collection(Collection $rows)
{
foreach ($rows as $row)
{
if($row[1] == "Entregado por:"){
break;
}
// busca el modelo
$modelo = Modelo::where('name', $row[4])->first();
if (!$modelo) {
// si no está lo crea
$modelo = $this->createModel($row);
}
// limpia el serial en caso de que tenga caracteres incorrectos
$row[2] = preg_replace("/[^a-zA-Z0-9]/", "", $row[2]);
// busca el dispositivo a partir del serial (aqui no contamos con rótulo)
$dispositivo = Device::where('serial', $row[2])->first();
$datos = [
// importa el acta
'serial' => $row[2],
'model_id' => $modelo->id,
// formatea fecha
'fecha_recepcion' => date("Y-m-d H:i:s", ($row['fecha'] - 25569)*86400),
'guia_recepcion' => $row['guia'],
'customer_id' => 1, // datos genéricos
'str_id' => 1 // datos genéricos
];
if (!$dispositivo) {
// de no existir un equipo lo crea
Device::create($datos);
} else {
// si existe lo actualiza con esta información
Device::where('id', $dispositivo->id)->update($datos);
}
}
}
public function createModel($row)
{
// crea modelo en sistema en caso de no existir en la base
$marca = Brand::where('name', $row[5])->first();
$nuevoModelo = new Modelo;
if($marca) {
$nuevoModelo->brand_id = $marca->id;
$nuevoModelo->name = $row[4];
$nuevoModelo->save();
}
else {
// si no existe la marca tiene que crearla
$nuevaMarca = new Brand;
$nuevaMarca->name = $row[5];
$nuevaMarca->save();
$nuevoModelo->brand_id = $nuevaMarca->id;
$nuevoModelo->name = $row[4];
$nuevoModelo->save();
}
return $nuevoModelo;
}
public function startRow(): int
{
return 11;
}
}
Также в таблице есть некоторые формулы.Я использовал WithCalculatedCells, но он все равно не читает ячейки.