1

我正在将 xlsx 导入 sql,但是在导入时出现以下错误:

FatalThrowableError in ItemController.php line 41:
Cannot access protected property Maatwebsite\Excel\Collections\RowCollection::$title

如果有人遇到同样的问题或知道会有什么建议,希望你能帮助我找到它。

这是我的控制器部分:

    public function importExcel()
        {

            if(Input::hasFile('import_file')){
                $path = Input::file('import_file')->getRealPath();
                $data = Excel::load($path, function($reader) {
                })->get();

                if(!empty($data) && $data->count()){
                    foreach ($data as $key => $value) {
                     $insert[] = ['title' => $value->title, 'description' => $value->description];
  //Line : 41                    
                    }
                    if(!empty($insert)){
                        DB::table('items')->insert($insert);
                      //  dd('Insert Record successfully.');
                    }
                }
            }
            return back();
        }

路线部分:

Route::post('/importExcel',[
        'uses'=>'ItemController@importExcel',
        'as'=>'importExcel'
    ]);

这是导入的 xlsx 文件:

在此处输入图像描述

当我 dd($data) 我看到以下数组:

RowCollection {#464 ▼
  #title: "Sheet1"
  #items: array:2 [▼
    0 => CellCollection {#390 ▼
      #title: null
      #items: array:3 [▼
        "title" => "Abdul"
        "description" => "This is Zaman"
        0 => null
      ]
    }
    1 => CellCollection {#410 ▼
      #title: null
      #items: array:3 [▼
        "title" => "Zaman"
        "description" => "This is Abdul"
        0 => null
      ]
    }
  ]
}
4

3 回答 3

1

您可以将集合转换为数组以访问每个项目的属性

$data = Excel::load($path)->toArray();

// dd($data)
于 2018-01-09T01:42:35.850 回答
0

你需要做另一个这样的循环

foreach ($data as $rows)
{
    foreach ($rows as $row)
    {
        $insert[] = ['title' => $row->title, 'description' => $row->description];
    }
}
var_dupmp($insert);

你应该看到这个结果

array(2) {
  [0]=>
  array(2) {
    ["title"]=>
    string(5) "Zaman"
    ["description"]=>
    string(13) "This is Zaman"
  }
  [1]=>
  array(2) {
    ["title"]=>
    string(5) "Abdul"
    ["description"]=>
    string(13) "This is Abdul"
  }

然后您可以将此数组插入数据库

有关更多信息,您可以查看以下问题的答案:

https://github.com/Maatwebsite/Laravel-Excel/issues/351

于 2016-09-01T12:40:19.997 回答
0

这应该适合你:

if (Input::hasFile('import_file')){
    $path = Input::file('import_file')->getRealPath();
    $data = Excel::load($data, function($reader) {
        // Loop through all rows
        $reader->each(function($row) {
            DB::table('items')->insert([
                'title'       => $row->title,
                'description' => $row->description
            ]);
        });
    });
}
return back();

force_sheets_collectioninconfig/excel.php必须设置为false.

于 2016-08-11T15:41:59.740 回答