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文件数据导入数据库代码实例

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • docker(1)下载安装for mac

    docker(1)下载安装for mac前言Docker提供轻量的虚拟化,你能够从Docker获得一个额外抽象层,你能够在单台机器上运行多个Docker微容器,而每个微容器里都有一个微服务或独立应用,例如你可以将Tomcat运行在一个D

  • 关于去色的公式_贝塔系数去杠杆化计算公式

    关于去色的公式_贝塔系数去杠杆化计算公式color=color.r*0.3 +color.g*0.59+color.b*0.11

  • Retrofit原理_Retrofit

    Retrofit原理_Retrofit一:Retrofit是什么?准确来说,Retrofit是一个RESTful的HTTP网络请求框架的封装。原因:网络请求的工作本质上是OkHttp完成,而Retrofit仅负责网络请求接口的封装我们先来看看下面这个图:上图说明了如下几点:1.App应用程序通过Retrofit请求网络,实际上是使用Retrofit接口层封装请求参数、Header、Url等信息,之后由OkHttp完成后续的请求操作。2.在服务端返回数据之后,OkHttp将原始的结果交给

    2022年10月30日
  • php基础设计模式(注册树模式、工厂模式、单列模式)

    php基础设计模式(注册树模式、工厂模式、单列模式)

  • vue+axios上传文件

    vue+axios上传文件vue+axios上传文件

  • 喊山第二部_喊山主演

    喊山第二部_喊山主演原题链接喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂—喂喂喂……”的呼唤。呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中,发出约定俗成的“讯号”,达到声讯传递交流的目的。原来它是彝族先民用来求援呼救的“讯号”,慢慢地人们在生活实践中发现了它的实用价值,便把它作为一种交流工具世代传袭使用。(图文摘自:http://news.xrxxw.com/newsshow-8018.html)一个山头呼喊的声音可以被临近的山头同时听到。题目假设每个山头最多有两个能听到它的临近山头。给定任意一个发

发表回复

您的电子邮箱地址不会被公开。

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