zoukankan      html  css  js  c++  java
  • laravel 导出插件

    转发:https://blog.csdn.net/gu_wen_jie/article/details/79296470

    版本:laravel5

              php 5.6

    安装步骤:

    一、安装插件

    ①、首先在Laravel项目根目录下使用Composer安装依赖:

    composer require "maatwebsite/excel:~2.1.0"

    ②、在config/app.php中注册服务提供者到providers数组:

    MaatwebsiteExcelExcelServiceProvider::class,

    ③、在config/app.php中注册门面到aliases数组:

    'Excel' => MaatwebsiteExcelFacadesExcel::class,

    ④、建议你生成Laravel Excel的配置文件,使用如下命令:

    php artisan vendor:publish --provider="MaatwebsiteExcelExcelServiceProvider"

    然后你会发现在config目录下有一个excel.php文件 
    你可以打开看一下大概的配置项,主要就是缓存,表单,和导入,导出的一些设置。

    二、使用

    ①、创建路由:

    //Excel导出 Route::get('/excel/export','MemberMemberController@export')->name('/excel/export');

    //Excel导入 Route::get('/excel/import','MemberMemberController@import')->name('/excel/import'); 

    1-1、导出的方法:

    <?php
    
    namespace AppHttpControllersMember;
    
    use AppHttpControllersBaseController;
    use AppModelMemberMemberFollow;
    use IlluminateHttpRequest;
    use IlluminateDatabaseQueryException;
    use Excel;
    
    class MemberController extends BaseController
    {
        /**
         *
         * Excel导出
         */
        public function export()
        {
            ini_set('memory_limit','500M');
            set_time_limit(0);//设置超时限制为0分钟
            $cellData = MemberFollow::select('xt_name','sex','face')->limit(5)->get()->toArray();
            $cellData[0] = array('昵称','性别','头像');
            for($i=0;$i<count($cellData);$i++){
                $cellData[$i] = array_values($cellData[$i]);
                $cellData[$i][0] = str_replace('=',' '.'=',$cellData[$i][0]);
            }
            //dd($cellData);
            Excel::create('用户信息',function($excel) use ($cellData){
                $excel->sheet('score', function($sheet) use ($cellData){
                    $sheet->rows($cellData);
                });
            })->export('xls');
            die;
        }
    }

    我来对上面的代码进行解释下。
    a. ini_set设置内存溢出大小和超时时间是因为我的数据量比较大,不想直接去php.ini中修改,所以直接在这设置。你也可以修改excel.php配置项中的缓存大小,适当调整。
    b. 首先你得需要知道cellData是一个二维数组,并且二维数组中的每一个一维数组必须是索引数组才行,这样格式上才能正确。
    所以,我对我查询出的$cellData先进行了toArray()转化操作。然后我让你看下查询出的结构,因为我们数组表中的每个列都是一个字段,所以决定了一维数组是关联数组,需要去键处理。

    for循环处理后就是:

      for循环中的另一个
    php
    $cellData[$i][0] = str_replace('=',' '.'=',$cellData[$i][0]);

    这个地方是比较坑的一个地,因为Excel单元格当你的导出数据中某个列的某个值第一个字符是等号“=”,他就会进行计算处理,然后就报错了。比如我到处的某个昵称是“=阳光”,我就吧等号匹配替换为空格加等号了
    其实本不需要进行匹配替换的,因为在excel.php文件中有配置项,但是我配置了并不生效,后续找到更好的解决方法会及时更新,或者有哪位知道了可以指点一下。  

     /*
            |--------------------------------------------------------------------------
            | Calculate
            |--------------------------------------------------------------------------
            |
            | By default cells with formulas will be calculated.
            |
            */
    
            'calculate'               => false,
    
    ---------------------
    作者:谷谷谷 
    来源:CSDN 
    原文:https://blog.csdn.net/gu_wen_jie/article/details/79296470?utm_source=copy 
    版权声明:本文为博主原创文章,转载请附上博文链接!
    

      

    默认情况下,计算公式的单元格将被计算。我设置为false没生效。所以匹配替换。

    如果你要导出csv或者xlsx文件,只需将export方法中的参数改成csv或xlsx即可。也可以进行连贯操作直接将导出的文件直接保存到服务器上。 
    使用store方法:

     Excel::create('用户信息',function($excel) use ($cellData){
                $excel->sheet('score', function($sheet) use ($cellData){
                    $sheet->rows($cellData);
                });
            })->store('xls')->export('xls');
    
    ---------------------
    作者:谷谷谷 
    来源:CSDN 
    原文:https://blog.csdn.net/gu_wen_jie/article/details/79296470?utm_source=copy 
    版权声明:本文为博主原创文章,转载请附上博文链接!
    

      ok,导出完成。

    2-1 导入:

    导入我们可以直接用第一步注册的门面Excel门面上的load方法

    /**
         *
         * Excel导入
         */
        public function import(){
            $filePath = 'storage/exports/'.iconv('UTF-8', 'GBK', '用户信息').'.xls';
            Excel::load($filePath, function($reader) {
                $data = $reader->all();
                dd($data);
            });
        }
    

      ok,导入完成。

  • 相关阅读:
    kvm
    Javascript 笔记与总结(2-7)对象
    [Swift]LeetCode172. 阶乘后的零 | Factorial Trailing Zeroes
    Swift5.3 语言指南(五) 基本运算符
    C#6.0语言规范(一) 介绍
    [Swift]LeetCode171. Excel表列序号 | Excel Sheet Column Number
    [Swift]LeetCode169. 求众数 | Majority Element
    [Swift]LeetCode168. Excel表列名称 | Excel Sheet Column Title
    [Swift]LeetCode167. 两数之和 II
    [Java]LeetCode141. 环形链表 | Linked List Cycle
  • 原文地址:https://www.cnblogs.com/sz-xioabai/p/9765382.html
Copyright © 2011-2022 走看看