读取 excel 文件并上传到数据库 Laravel 5

Reading excel file and uploading to database Laravel 5

我有这个项目,我应该能够上传 excel 文件并读取内容,然后将信息上传到数据库。所以我决定使用一个库来帮助我 Maatwebsite/Laravel-Excel

但我尝试阅读文档 http://www.maatwebsite.nl/laravel-excel/docs/import 但我似乎找不到我需要的那个。

比如我的excel文件第一行John,Kennedy,Male 在我的数据库中对应 First NameLast NameGender。 如何阅读和上传?有人能帮我吗?

谢谢!

我现在的代码

public function postUploadCsv()
{
    $rules = array(
        'file' => 'required',
        'num_records' => 'required',
    );

    $validator = Validator::make(Input::all(), $rules);
    // process the form
    if ($validator->fails()) 
    {
        return Redirect::to('customer-upload')->withErrors($validator);
    }
    else 
    {
        $file = Input::file('file');
        dd($file);
        exit();
    } 
}

鉴于您的 excel sheet 列名与数据库列名完全相同,

在控制器上方添加以下内容class,

use Maatwebsite\Excel\Facades\Excel;
use Illuminate\Support\Facades\Input;

和函数代码,

public function postUploadCsv()
{
    $rules = array(
        'file' => 'required',
        'num_records' => 'required',
    );

    $validator = Validator::make(Input::all(), $rules);
    // process the form
    if ($validator->fails()) 
    {
        return Redirect::to('customer-upload')->withErrors($validator);
    }
    else 
    {
        try {
            Excel::load(Input::file('file'), function ($reader) {

                foreach ($reader->toArray() as $row) {
                    User::firstOrCreate($row);
                }
            });
            \Session::flash('success', 'Users uploaded successfully.');
            return redirect(route('users.index'));
        } catch (\Exception $e) {
            \Session::flash('error', $e->getMessage());
            return redirect(route('users.index'));
        }
    } 
} 

更新

假设您在一个工作簿中有多个 sheet,您将有额外的 foreach 来迭代 sheet,如下所示,

Excel::load(Input::file('file'), function ($reader) {

     $reader->each(function($sheet) {    
         foreach ($sheet->toArray() as $row) {
            User::firstOrCreate($row);
         }
     });
});

Read More

如果您使用 Laravel 5.3 并且您的 excel sheet 列不准确

使用以下代码来满足您的需求

/**
 * Import file into database Code
 *
 * @var array
 */
public function importExcel(Request $request)
{
    if($request->hasFile('import_file')){

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

        if(!empty($data) && $data->count()){

            foreach ($data->toArray() as $key => $value) {

                if(!empty($value)){

                    foreach ($value as $v) {        

                        $insert[] = ['title' => $v['title'], 'description' => $v['description']];

                    }
                }
            }

            if(!empty($insert)){
                Item::insert($insert);
                return back()->with('success','Insert Record successfully.');
            }
        }
    }

    return back()->with('error','Please Check your file, Something is wrong there.');

}

查看完整教程here

注意默认 - 从您那里提取数据后 excel sheet,所有列名都将转换为小写,名称之间的所有空格都将替换为下划线。

我有这个项目,我应该能够上传 excel 文件并读取内容,然后将信息上传到数据库。所以我决定使用一个库来帮助我,结果是

<?php

namespace App\Imports;

use App\Models\aas;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\DB;
use Maatwebsite\Excel\Concerns\ToCollection;


class Lecture implements ToCollection
{
    /**
    * @param Collection $collection
    */
    public function collection(Collection $collection)
    {
        $t=count($collection[0]);
        foreach ($collection as $row) 
        {
            
            for ($i=0; $i < $t; $i++) { 
                if ($i==0) {
                    $ver=mb_strstr( $row[$i], '2021' );
                    if($ver==FALSE) break;
                }
                if (!empty($row[$i])) {
                    
                    switch ($collection[0][$i]) {
                        case 'Ag':
                            
                           aas::create([
                                'ref' => $row[0],
                                'lect' => $row[$i],
                                'code' => 9,
                                ]);
                            break;
                        case 'Cu':
                           
                            aas::create([
                                'ref' => $row[0],
                                'lect' => $row[$i],
                                'code' => 9,
                                ]);
                            
                            break;
                        case 'Pb':
                           
                            aas::create([
                                'ref' =>$row[0],
                                'lect' =>$row[$i],
                                'code' => 10,
                            ]);
                            break;
                        case 'Zn':
                           
                            aas::create([
                                'ref' =>$row[0],
                                'lect' =>$row[$i],
                                'code' => 11,
                            ]);
                            break;
                        case 'Mn':
                            
                            aas::create([
                                'reference_labo' =>$row[0],
                                'lecture' =>$row[$i],
                                'code' => 12,
                            ]);
                            break;
                        case 'Co':
                           
                            aas::create([
                                'ref' =>$row[0],
                                'lect' =>$row[$i],
                                'code' => 13,
                            ]);
                            break;
                        case 'Ni':
                            
                            aas::create([
                                'ref' =>$row[0],
                                'lect' =>$row[$i],
                                'code' => 14,
                            ]);
                            break;
                        case 'Fe':
                          
                            aas::create([
                                'ref' =>$row[0],
                                'lect' =>$row[$i],
                                'code' => 15,
                            ]);
                            break;
                    }
                  
                }
            }
        }
       
    }
}

我的函数执行得很好,但数据没有在数据库中注册