このプロジェクトでは、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シートの列名は、次のデータベース列名で十分であるため、
上記のコントローラクラスを追加し、
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'));
}
}
}
[〜#〜] update [〜#〜]
ワークブックに複数のシートがある場合、次のようにシートを反復処理する追加のforeach
があり、
Excel::load(Input::file('file'), function ($reader) {
$reader->each(function($sheet) {
foreach ($sheet->toArray() as $row) {
User::firstOrCreate($row);
}
});
});
Laravel 5.3を使用していて、Excelシートの列が正確ではない場合)
次のコードを使用してニーズに合わせてください
/**
* 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.');
}
完全なチュートリアルをご覧ください こちら
デフォルトで注意してください-Excelシートからデータが抽出されると、すべての列名が小文字に変換され、名前間のすべてのスペースがアンダースコアに置き換えられます。