导入文件时如何跳过第一行

时间:2019-06-23 18:32:49

标签: laravel maatwebsite-excel

我正在尝试使用.xlsx版本3.1导入Laravel版本5.7的Maatwebsite-excel文件。我想要实现的是跳过文件的第一行,以避免在数据库中导入列标题。

我尝试使用版本2语法,调用skip()方法。

public function voter_import(Request $request)
{
    if (empty($request->file('file')->getRealPath())) 
    {
        return back()->with('success','No file selected');
    }
    else 
    {
        Excel::import(new VotersImport, $request->file('file'))->skip(1);
        return response('Import Successful, Please Refresh Page');
    }
}

class VotersImport implements ToModel
{
public function model(array $row)
   {
    return new Voter([
      'fname'          =>  $row[0],
      'lname'          =>  $row[1],
      'phone'          =>  $row[2],
      'gender'         =>  $row[3],
      'state'          =>  $row[4],
      'occupation'     =>  $row[5],
      'address'        =>  $row[6],
      'vin'            =>  $row[7],
      'dob'            =>  $row[8],
      'campaign_id'    =>  $row[9],
    ]);
   }
}

错误消息:

  

Call to undefined method Maatwebsite\Excel\Excel::skip()

2 个答案:

答案 0 :(得分:0)

您可以实现StartingRow

use Maatwebsite\Excel\Concerns\WithStartRow;

class VotersImport implements ToModel, WithStartRow
{
    /**
     * @return int
     */
    public function startRow(): int
    {
        return 2;
    }
}

另一种选择是使用HeadingRow find

答案 1 :(得分:0)

在加载Excel文件之前添加此代码。它对我有用。

config(['excel.import.startRow' => your_number_of_row_to_skip]);

例如:

$path = $request->file('select_file')->getRealPath();
config(['excel.import.startRow' => 4]);
$data = Excel::load($path)->get();