thinkPHP+phpexcel实现excel报表输出功能示例

下面我将给您详细讲解“thinkPHP+phpexcel实现excel报表输出功能示例”的完整攻略,过程中将包含两条示例说明。

下面我将给您详细讲解“thinkPHP+phpexcel实现excel报表输出功能示例”的完整攻略,过程中将包含两条示例说明。

1. 简介

1.1 ThinkPHP

ThinkPHP 是一个免费开源的、快速、简单的面向对象的轻量级PHP开发框架。他能够快速的建立一个高性能的网站应用程序。

1.2 PHPExcel

PHPExcel 是一个强大、开放、免费、跨平台的PHP类库,可以用来读取和写入Microsoft Excel格式的电子表格文件。

2. 实现

2.1 安装

首先,我们需要安装 ThinkPHP 和 PHPExcel,可以使用 Composer 进行安装,具体方法可以参考官网文档。

2.2 控制器

我们需要在 MVC 中添加一个控制器(Controller),在该控制器中添加一个 action,通过该 action 来实现生成 Excel 报表的功能。

<?php
namespace app\index\controller;

use think\Controller;
use think\Loader;

class Index extends Controller
{
    public function index()
    {
        // 实现业务逻辑
    }

    /**
     * 生成 Excel 报表
     */
    public function exportExcel()
    {
        // 获取数据
        $data = [
            ['姓名', '年龄'],
            ['张三', '18'],
            ['李四', '19'],
            ['王五', '20']
        ];

        // 加载 PHPExcel 类
        Loader::import('PHPExcel.PHPExcel');
        $PHPExcel = new \PHPExcel();

        // 设置表格头
        $PHPExcel->setActiveSheetIndex(0)
            ->setCellValue('A1', '姓名')
            ->setCellValue('B1', '年龄');

        // 填充数据
        $num = 2;
        foreach ($data as $value) {
            $PHPExcel->setActiveSheetIndex(0)
                ->setCellValue('A'.$num, $value[0])
                ->setCellValue('B'.$num, $value[1]);
            $num++;
        }

        // 导出 Excel
        $filename = 'test.xlsx';

        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="'.$filename.'"');
        header('Cache-Control: max-age=0');

        $objWriter = \PHPExcel_IOFactory::createWriter($PHPExcel, 'Excel2007');
        $objWriter->save('php://output');
    }
}

2.3 视图

在展示界面上,我们可以使用 HTML 或者是其他前端框架来实现。在点击导出 Excel 按钮时,可以通过 AJAX 请求后端控制器中的 action。

<button onclick="exportExcel()">导出 Excel</button>

<script>
function exportExcel() {
    // AJAX 请求实现导出 Excel
    $.ajax({
        type: 'POST',
        url: '/index.php/index/Index/exportExcel',
        success: function(msg) {
            window.location.href = msg;
        }
    });
}
</script>

3. 示例说明

3.1 示例一

我们以本例中的代码为例,来生成一个包含姓名和年龄的 Excel 报表。在点击导出 Excel 按钮之后,将会下载一个名为“test.xlsx”的 Excel 文件,其中包含姓名为张三、李四、王五的三个人的年龄信息。

3.2 示例二

我们修改一下代码,来生成一个更为复杂的 Excel 报表,包含多个表单和多行数据,更适合实际的生产环境。

<?php
namespace app\index\controller;

use think\Controller;
use think\Loader;

class Report extends Controller
{
    /**
     * 生成 Excel 报表
     */
    public function exportExcel()
    {
        // 加载模型
        $model = model('Report');

        // 获取数据
        $user = $model->getUserList();
        $order = $model->getOrderList();

        // 加载 PHPExcel 类
        Loader::import('PHPExcel.PHPExcel');
        $PHPExcel = new \PHPExcel();

        // 设置表格头
        $PHPExcel->createSheet();
        $PHPExcel->setActiveSheetIndex(0)
            ->setCellValue('A1', '用户名')
            ->setCellValue('B1', '注册时间')
            ->setCellValue('C1', '积分');

        // 填充用户数据
        $num = 2;
        foreach ($user as $value) {
            $PHPExcel->setActiveSheetIndex(0)
                ->setCellValue('A'.$num, $value['username'])
                ->setCellValue('B'.$num, $value['reg_time'])
                ->setCellValue('C'.$num, $value['points']);
            $num++;
        }

        // 设置表格头
        $PHPExcel->createSheet();
        $PHPExcel->setActiveSheetIndex(1)
            ->setCellValue('A1', '订单号')
            ->setCellValue('B1', '生成时间')
            ->setCellValue('C1', '状态');

        // 填充订单数据
        $num = 2;
        foreach ($order as $value) {
            $PHPExcel->setActiveSheetIndex(1)
                ->setCellValue('A'.$num, $value['order_id'])
                ->setCellValue('B'.$num, $value['create_time'])
                ->setCellValue('C'.$num, $value['status']);
            $num++;
        }

        // 导出 Excel
        $filename = 'report.xlsx';

        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="'.$filename.'"');
        header('Cache-Control: max-age=0');

        $objWriter = \PHPExcel_IOFactory::createWriter($PHPExcel, 'Excel2007');
        $objWriter->save('php://output');
    }
}

此时,我们定义了两个表单,分别展示了用户数据和订单数据。在视图中点击导出 Excel 按钮之后,将会下载一个名为“report.xlsx”的 Excel 文件,其中包含了两个表单,一个表单展示了用户数据,另一个表单则展示了订单数据。

4. 总结

本文通过一个简单的示例实现了使用 ThinkPHP + PHPExcel 实现生成 Excel 报表的功能,包括了控制器的编写、视图的设计和导出 Excel 的方法,也给出了另一个更为复杂的示例,能够展现出更为多样化的 Excel 报表。希望能给大家提供一些参考和帮助。

本文标题为:thinkPHP+phpexcel实现excel报表输出功能示例

基础教程推荐