duanouyong4228 2019-03-04 13:31
浏览 77

Laravel Excel不读取任何值

I have a spreadsheet which I wanna read to get values to my database but when checking with var_dump() it reads every row as NULL. The Excel file is a XLSX.

Something odd about this spreadsheet is that it starts at row 11 but I need to get some values that are above as "mapped cells".

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;
    }



}

Also the spreadsheet has some formulas within. I've used WithCalculatedCells but it doesn't read the cells anyway.

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
    • ¥15 CSAPPattacklab
    • ¥15 一直显示正在等待HID—ISP
    • ¥15 Python turtle 画图
    • ¥15 关于大棚监测的pcb板设计
    • ¥15 stm32开发clion时遇到的编译问题
    • ¥15 lna设计 源简并电感型共源放大器
    • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
    • ¥15 Vue3地图和异步函数使用
    • ¥15 C++ yoloV5改写遇到的问题