读取 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 Name
、Last Name
、Gender
。
如何阅读和上传?有人能帮我吗?
谢谢!
我现在的代码
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);
}
});
});
如果您使用 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;
}
}
}
}
}
}
我的函数执行得很好,但数据没有在数据库中注册
我有这个项目,我应该能够上传 excel 文件并读取内容,然后将信息上传到数据库。所以我决定使用一个库来帮助我 Maatwebsite/Laravel-Excel
但我尝试阅读文档 http://www.maatwebsite.nl/laravel-excel/docs/import 但我似乎找不到我需要的那个。
比如我的excel文件第一行John
,Kennedy
,Male
在我的数据库中对应 First Name
、Last Name
、Gender
。
如何阅读和上传?有人能帮我吗?
谢谢!
我现在的代码
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);
}
});
});
如果您使用 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;
}
}
}
}
}
}
我的函数执行得很好,但数据没有在数据库中注册