laravel 导出插件

摘要:
phpnamespaceAppHttpControllers成员;使用AppHttpControllersBaseController;useAppModelMemberMemberFollow;useIlluminateHttpRequest;useIlluminateDatabaseQueryException;使用Excel;ClassMemberControllerextendsBaseController{/***Excel export*/publicfunctionexport(){ini_set;set_time_limit;//将超时限制设置为0分钟$cellData=MemberFollow::select-˃limit-˃get()-˃toArray();$cellData[0]=array;for{$cellData[$i]=array_values;$cellData[$i][0]=str_replace;}//dd;Excel::创建-˃导出;死亡;}让我解释一下上面的代码。因此,我首先对找到的$cellData执行toArray()转换。处理for循环后,for loop_replace中的另一个php$cellData[$i][0]=str;这里是一个比较坑,因为在Excel单元格中,当导出数据中某列值的第一个字符是等号“=”时,它将执行计算,然后报告一个错误/*|----------------------------------------------------------------------------|计算|----------------------------------------------------------------------------||Bydefaultcells,其中formulaswillbe calculated.|*/'calculate'=˃false,---------------------作者:Gu Gu来源:CSDN原文:https://blog.csdn.net/gu_wen_jie/article/details/79296470?utm_source=copy版权声明:这是博主的原创文章。请附上该博客的链接以供转载!好,导出完成。

转发: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()转化操作。然后我让你看下查询出的结构,因为我们数组表中的每个列都是一个字段,所以决定了一维数组是关联数组,需要去键处理。

laravel 导出插件第1张

for循环处理后就是:

laravel 导出插件第2张

  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 导出插件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇kudu 学习知识点总结(二)spring boot中的日志入门下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用ado访问excel中的数据

【1】链接数据源(excel文件) (1)配置链接字符串: string connString = @"Provider = Microsoft.Jet.OLEDB.4.0; Extended Properties = Excel 8.0; Data Source = C:UsersBoBoDesktopstudent.xlsx"; (2)创建链...

将数据填充到已有的EXECL模板中

导出execl网上一大堆,最近遇到将数据导出到已有的execl模板中,具体到某行列,动态加载数据。 添加Microsoft.Office.Interop.Excel 引用 1 /// <summary> 2 ///DataGridView 导出到execl模板中 3 /// </summary> 4...

数据结构与算法80道

1. 把二元查找树转变成排序的双向链表 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不能创建任何新的结点,只调整指针的指向。    10  /  6 14  / / 4 8 12 16  转换成双向链表 4=6=8=10=12=14=16。   首先我们定义的二元查找树 节点的数据结构如下:  struct BSTreeN...

asp定义数组详解 转载

asp定义数组详解 asp定义数组详解数组是有序数据的集合。数组中的元素可以不属于同一个数据类型。用一个统一的数组名和下标来唯一地确定数组中的元素,更改其中一个元素并不会影响其它元素。数组的下标是有界的,分为下界和上界。数组可以用Dim、Private、Public或Static来声明,它们的语法格式相同。下面只介绍用 Dim声明数组的方法。1.数组的定义与...

vcf格式文件转化为Excel(csv)格式文件(R语言的write.csv,write.table功能,Excel表的文件导入功能)

最近在整理文件,准备把vcf文件转化为Excel格式,或者CSV格式,网上搜了一堆资料,还真有人专门开发出转化格式的工具:叫vcf2csv(下载地址http://vcf2csv.sourceforge.net/#links),赶紧下载安装,开始转化,结果弹出行列不一致的错误,遂放弃。 尝试了一堆无用的工具以后,想着能不能用R的write.csv来实现转化,...

thinkphp整合系列之phpexcel生成生成excel文件

在后台管理中会经常需要将数据生成excel表格的; php生成excel有两种方案; 一种是通过phpexcel生成xls格式的表格文件; 另一种则直接通过逗号换行生成csv格式的表格文件; 这里先讲解thinkphp整合phpexcel的过程; 示例项目:http://git.oschina.net/shuaibai123/thinkphp-bjyadm...