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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • chmod的用法_group用法与语法

    chmod的用法_group用法与语法介绍Linux中的Chmod命令用于更改或分配文件和目录的权限。在Linux/Unix系统中,文件和目录的可访问性是由文件所有权和权限决定的。在上一篇文章中,我们了解了如何使用chown命令管理文件和目录的所有权。在本教程中,我们将介绍chmod命令。chmod命令(changemode的缩写)用于管理文件和目录权限,并确定谁可以访问它们。现在让我们深入了解文件和目录权限的本质,以及如何修改它们。Linux权限文件和目录可以属于文件(u),组(g)或其他(o)的所有者u-所有人的权限g

    2022年10月20日
    2
  • 《大话数据结构》电子版多看阅读独家上线[通俗易懂]

    《大话数据结构》电子版多看阅读独家上线[通俗易懂]经过了漫长的制作过程,《大话数据结构》电子版终于在多看阅读独家上线http://www.duokan.com/book/44279电子版本修正了目前已知的所有错误,可以在各种平板和智能手机上阅读,不过由于图和代码较多,建议使用平板电脑阅读效果更佳。 …

    2022年6月24日
    31
  • long转string java_java中Long类型转换为String类型的两种方法及区别

    long转string java_java中Long类型转换为String类型的两种方法及区别1、Long.ValueOf(“String”)返回Long包装类型数据包装类型:Byte,Integer,Short,Long,Boolean,Character,Float,Double等。2、Long.parseLong(“String”)返回long基本数据类型基本数据类型:byte,int,short,long,boolean,char,float,double等。注意事项:1、字符串内…

    2022年5月14日
    104
  • JShell介绍「建议收藏」

    JShell介绍「建议收藏」文章目录一、JShell是什么?二、为什么使用JShell三、使用步骤1.安装jdk9.0以上版本2.cmd命令行中进入JShell3.就可以直接敲击单行代码了引用一、JShell是什么?JavaShell工具(JShell)是用于学习Java编程语言和原型化Java代码的交互式工具。该工具使用命令行运行。二、为什么使用JShell使用JShell,可以一次输入一个程序元素,立即查看结果,并根据需要进行调整。三、使用步骤1.安装jdk9.0以上版本例如我的是15.0版本:2.cm

    2025年6月17日
    4
  • cubieboard2 android,在cubieboard2双卡版上从零构建Android4.2.2系统「建议收藏」

    cubieboard2 android,在cubieboard2双卡版上从零构建Android4.2.2系统「建议收藏」板子买了一段时间,终于有时间可以玩玩了,论坛上找浪费了很多时间。把虚拟机环境搭建起来,编译好镜像就可以直接使用烧写工具烧写到TF卡上了。由于买的是双TF卡插槽,没有nand,所以只能在TF卡上制作镜像了。制作过程参考官方文档,好好总结一下,一来以后自己再做时图懒图方便,二来可以方便后来人。主要可以分为一下几个步骤:一、搭建编译环境可以在XP或win7系统上安装虚拟机,在虚拟机中安装交叉编译工具来编…

    2022年7月22日
    14
  • 你了解System.out.println()的真正含义吗?

    你了解System.out.println()的真正含义吗?在Java编程中,我们常常用 System.out.println(); 来输出字符串,也许我们都已经猜到println()是方法名,但System是什么,out又是什么呢?  其实System是java.lang里面的一个类,如下图:     而out就是System里面的一个静态数据成员,而且这个成员是java.io.PrintStream类的引用。如下图,被关键字static修饰的成员可…

    2025年7月24日
    4

发表回复

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

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