laravel 導出插件

轉發:https://blog.csdn.net/gu_wen_jie/article/details/79296470php

版本:laravel5laravel

          php 5.6web

安裝步驟:數組

1、安裝插件緩存

①、首先在Laravel項目根目錄下使用Composer安裝依賴:服務器

composer require "maatwebsite/excel:~2.1.0"app

②、在config/app.php中註冊服務提供者到providers數組:composer

Maatwebsite\Excel\ExcelServiceProvider::class,ide

 

③、在config/app.php中註冊門面到aliases數組:ui

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

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

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

 

而後你會發如今config目錄下有一個excel.php文件 
你能夠打開看一下大概的配置項,主要就是緩存,表單,和導入,導出的一些設置。

 

2、使用

①、建立路由:

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

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

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,導入完成。

相關文章
相關標籤/搜索