larave5.6 将Excel文件数据导入数据库代码实例

larave5.6 将Excel文件数据导入数据库代码实例

<?php

namespace App\Admin\Controllers;

use App\AdminUser;
use Illuminate\Http\Request;

use Excel;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;

class ExcelController extends Controller
{
    //
    public function index()
    {
        return view('admin/excel/index');
    }

    //导出
    public function export(Request $request)
    {
        /*   $cellData = array(['学号', '姓名', '成绩'], ['10001', 'AAAAA', '99']);
             Excel::create('学生成绩', function ($excel) use ($cellData) {
                 $excel->sheet('score', function ($sheet) use ($cellData) {
                     $sheet->rows($cellData);
                 });
             })->export('xls');*/

        //方法二:
        $users = AdminUser::all()->toArray();
        $header[] = array('ID号', '姓名', '邮箱', '创建时间', '状态');
        $arr = array();
        foreach ($users as $one) {
            $data = array($one['id'], $one['name'], $one['email'], $one['created_at'], $one['status']);
            array_push($arr, $data);
        }
        $arrData = array_merge($header, $arr);

        Excel::create(iconv('UTF-8', 'UTF-8', '管理员表'), function ($excel) use ($arrData) {
            $excel->sheet('score', function ($sheet) use ($arrData) {
                $sheet->rows($arrData);
            });
        })->store('xlsx')->export('xlsx');
    }

    //导入
    public function import(Request $request)
    {
        /*$filePath = 'storage/exports/' . iconv('UTF-8', 'GBK', '学生成绩') . '.xls';
        Excel::load($filePath, function ($reader) {
            $data = $reader->all();
            dd($data);
        });*/

        //        $file=Input::file('file');        dd(base_path());
        $file = $request->file('file');
        $tabl_name = date('YmdHis', time()) . rand(100, 999);
        $entension = $file->getClientOriginalExtension(); //上传文件的后缀.
        $new_name = $tabl_name . '.' . $entension;
        if ($file->isValid()) {
            $path = $request->file('file')->storeAs('import', $new_name);
            // 更新文件本地地址  storage/import/20180720105908.xlsx
            $path = '/public/storage/' . $path;
            // dd($path); ///public/storage/import/20180720124843.xlsx"
            Excel::load($path, function ($reader) use ($tabl_name) {
                //$data = $reader->all();
                //获取Excel的第几张表
                $reader = $reader->getSheet(0);
                //获取表中数据
                $data = $reader->toArray();
//                dd($data);
                $result = $this->create_table($tabl_name, $data);
//                dd($result);
            });
        }


        return redirect('/admin/files');
    }

    //创建表
    public function create_table($table_name, $field_arr)
    {
        $tmp = $table_name;
        $val = $field_arr;
        //创建表结构  因为已经有db_import表不再需要执行创建表结构程序。
        //注意Excel标题最好是英文
        /*  $tables = DB::select("show tables");
          $tables = array_column($tables, 'Tables_in_blog');*/
        $tables = array_map('reset', \DB::select('SHOW TABLES'));
        if (!in_array('db_import', $tables)) {
            Schema::dropIfExists('db_import');
            Schema::create("db_import", function (Blueprint $table) use ($tmp, $val) {
                $fields = $val[0];          //列字段
                $table->increments('id');  //主键
                foreach ($fields as $key => $value) {
                    $table->string($fields[$key]);
                }
            });
        }


        //填充数据
        $value_str = array();
        if ($id = DB::table('db_import')->max('id')) {
            $id = $id + 1;
        } else {
            $id = 1;
        }
        //$id = DB::table('db_import')->max('id') ? DB::table('db_import')->max('id') + 1 : 1;
        foreach ($val as $key => $value) {
            if ($key != 0) {
//                $content = implode(',', $value);
//                $content2 = explode(',', $content);
                foreach ($value as $key2 => $va2) {
                    if (!empty($va2)) {
                        $value_str[] = "'$va2'";
                    }
                }
                $news = implode(',', $value_str);
                if (!empty($news)) {
                    $news = "$id," . $news;
                    DB::insert("insert into db_import VALUES ($news)");
                }

                $value_str = array();
                $id = $id + 1;
            }
        }
        return $id;
    }


}

 

larave5.6 将Excel文件数据导入数据库代码实例

larave5.6 将Excel文件数据导入数据库代码实例

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/113088.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Eclipse中建多层级包时出现的问题「建议收藏」

    Eclipse中建多层级包时出现的问题「建议收藏」最近一直在学习idea的使用,好久没有用Eclipse了,今天想试着写一个功能,但是在Eclipse中创建包时出现问题了。创建的包都成为平级了。那么Eclipse中如何创建多层包呢?解决方案:    方法一:         1)先在src文件夹下创建com包,在com包里面创建一个类,例如:点击Finish就会出现如下:    2)以此类推建想要建的包,在删除之前的Test类即可。以下是我的效果…

    2022年6月13日
    32
  • 关于Android 10.0适配,看这篇就够了

    本文将从三个角度介绍AndroidQ的部分适配问题,也是大家开发适配过程中大概率会遇到的问题:Q行为变更:所有应用(不管targetSdk是多少,对所有跑在Q设备上的应用均有影响) Q行为变更:以AndroidQ为目标平台的应用(targetSDK==Q才有影响) 项目升级遇到的问题至于Q的新功能及SDK,项目中并没有涉及,故暂不介绍,只放出链接AndroidQ新AP…

    2022年4月8日
    78
  • [VB.NET]圖片透明化[通俗易懂]

    [VB.NET]圖片透明化[通俗易懂]原URL:http://www.dotblogs.com.tw/chou/archive/2009/02/12/7120.aspx有沒有辦法做到圖片的透明化,我們可以透過MakeTransparent達成MSDN:Bitmap.MakeTransparent方法:為這個Bitmap將預設的透明色彩變為透明。 而在此程式中,加上了讓使用者點選顏色的功能,並且讓點

    2022年7月21日
    21
  • C# – ref

    C# – ref

    2022年1月24日
    49
  • mx53 linux gpio 模拟matrix keypad

    mx53 linux gpio 模拟matrix keypadmx53linux用gpio模拟matrixkeypad需要做的工作1、在配置内核驱动的时候添加gpiomatrixkeypad        DeviceDrivers—>                  Inputdevicesupport —>                           Keyboards —>

    2022年5月15日
    36
  • windows下面编译ucosII操作系统

    windows下面编译ucosII操作系统       ucos是一款在嵌入式系统上应用的实时操作系统,为了调试和学习(我们部门负责DSP、MCU、ARM到服务器的各种程序),有必要再windows下面模拟运行,我在一个德国网站上找到了一份移植过的代码,经过我的小小修改,已经可以用VS2010和Dev-C++(MinGw编译器)上编译运行。 运行过程中发现2个编译器编译出来的程序运行结果并不相同,看来2种编译器在实现…

    2022年6月4日
    28

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号