laravel导出excel

本文详细介绍了如何在Laravel项目中使用Maatwebsite的Excel包进行数据的导入和导出,包括安装配置、创建路由和控制器,以及具体的导出和导入代码示例。

首先在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');

 

创建控制器,可以使用artisan命令或者手动创建:

php artisan make:controller 控制器名称

 

导出方法:

<?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分钟
        $type = Input::get('type');
      $cellData[0] = ['用户名','商品名','商品价格','购买数量','总支付额','下单时间','支付时间','收货地址','收货人','收货人电话','订单编号','备注'];
        $order = DB::table('order')
            ->join('user', 'user.u_id', '=', 'order.u_id')
            ->join('goods', 'goods.g_id', '=', 'order.goods_id')
            ->where('order_status',$type)->get();
      foreach ($order as $key => $val) {
        $cellData[$key+1][1] = $val['u_name'];
        $cellData[$key+1][2] = $val['g_title'];
        $cellData[$key+1][3] = $val['g_new_price'];
        $cellData[$key+1][4] = $val['goods_num'];
        $cellData[$key+1][5] = $val['count_money'];
        $cellData[$key+1][6] = date('Y-m-d H:i:s',$val['add_time']);
        $cellData[$key+1][7] = date('Y-m-d H:i:s',$val['money_time']);
        $cellData[$key+1][8] = $val['order_address'];
        $cellData[$key+1][9] = $val['order_people_name'];
        $cellData[$key+1][10] = $val['shou_phone'];
        $cellData[$key+1][11] = empty($val['order']) ? "等待生成快递单号": $val['order'];
        $cellData[$key+1][12] = $val['remark'];
      }
        //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()转化操作。然后我让你看下查询出的结构,因为我们数组表中的每个列都是一个字段,所以决定了一维数组是关联数组,需要去键处理。 
其实本不需要进行匹配替换的,因为在excel.php文件中有配置项,但是我配置了并不生效,后续找到更好的解决方法会及时更新,或者有哪位知道了可以指点一下。

 /*
        |--------------------------------------------------------------------------
        | Calculate
        |--------------------------------------------------------------------------
        |
        | By default cells with formulas will be calculated.
        |
        */

        'calculate'               => false,
默认情况下,计算公式的单元格将被计算。我设置为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');

ok,导出完成。

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

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

### 如何在 Laravel 中使用库或方法导出 Excel 文件 为了实现在 Laravel 应用程序中导出 Excel 文件的功能,可以采用 `maatwebsite/excel` 这一扩展包来简化开发过程。此扩展包支持多种版本的 Laravel 和 PHP 的不同组合。 安装该扩展包可以通过 Composer 来完成,在命令行工具中输入如下指令: ```bash composer require maatwebsite/excel:^3.1 ``` 配置完成后,接下来定义用于创建并下载 Excel 文档的服务提供者以及注册中间件等必要设置[^3]。 对于具体的导出逻辑实现,则需编写控制器中的相应动作函数。下面给出一段简单的例子展示怎样构建一个基本的数据集并通过浏览器返回给客户端作为附件形式自动触发下载行为: ```php use Maatwebsite\Excel\Facades\Excel; use App\Exports\UsersExport; class UserController extends Controller { /** * 导出用户数据至 Excel 表格. */ public function export() { return Excel::download(new UsersExport, 'users.xlsx'); } } ``` 这里假设存在名为 `UsersExport` 类继承自 `\Maatwebsite\Excel\Concerns\FromCollection` 接口,并实现了其抽象成员——即用来获取待写入工作表内的记录集合的方法;而第二个参数则是指定最终生成文件的名字连同后缀名一起传递过去以便于识别[^2]。 此外还有一种更简便的方式可以直接利用闭包快速构造小型报表而不必单独建立类结构体: ```php return Excel::create('filename', function($excel) { $excel->sheet('Sheetname', function($sheet) { // 处理要填充的内容... }); })->export('xlsx'); // 或者 pdf 如果需要的话 ``` 以上两种方式均能有效地帮助开发者处理日常业务场景下的批量数据交换需求[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值