laravel 导出插件

Posted shenzen_小白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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数组:

Maatwebsite\\Excel\\ExcelServiceProvider::class,

 

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

\'Excel\' => Maatwebsite\\Excel\\Facades\\Excel::class,

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

php artisan vendor:publish --provider="Maatwebsite\\Excel\\ExcelServiceProvider"

 

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

 

二、使用

①、创建路由:

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

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

1-1、导出的方法:

<?php

namespace App\\Http\\Controllers\\Member;

use App\\Http\\Controllers\\BaseController;
use App\\Model\\Member\\MemberFollow;
use Illuminate\\Http\\Request;
use Illuminate\\Database\\QueryException;
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,导入完成。

 

以上是关于laravel 导出插件的主要内容,如果未能解决你的问题,请参考以下文章

[搬运] 将 Visual Studio 的代码片段导出到 VS Code

laravel-admin 自定义导出excel功能,并导出图片

laravel 数据导出 Excel

laravel特殊功能代码片段集合

需要一种有效的方法来避免使用 Laravel 5 重复代码片段

基于数据表 Laravel 4 导出 CSV 或 PDF