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报表输出功能示例 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • php微信小程序解包过程实例详解

    PHP微信小程序解包过程实例详解 前言 微信小程序在开发和调试时,会将代码打包成.wxa格式,这无法直接查看和修改代码,需要进行解包操作。 本文将介绍使用PHP对微信小程序进行解包的过程,包括解码,解密和解压缩等步骤。 解包准备 获取.wxa文件 首先需要在微信小程序开发者工具中,将代码打包成.wxa格式,然后将其下载到本地。 安装PHP环境 在本机安装PH…

    PHP 2023年5月23日
    00
  • 基于PHP CURL获取邮箱地址的详解

    请听我详细讲解基于PHP CURL获取邮箱地址的详解。 一、准备工作 首先,为了实现基于PHP CURL获取邮箱地址,我们需要准备以下两个方面的内容: 1. CURL扩展 要使用CURL扩展,首先需要在PHP中启用CURL扩展。在PHP中启用CURL扩展非常简单,只需要在php.ini中找到extension=curl这一行,去掉前面的注释(分号),并重启w…

    PHP 2023年5月26日
    00
  • php将图片文件转换成二进制输出的方法

    当需要在PHP中将图片文件转换成二进制输出时,可以使用file_get_contents()函数将文件内容读取到一个字符串中,再使用base64_encode()函数对这个字符串进行编码,最后再通过输出流将编码后的字符串发送给客户端。 以下是详细的攻略: 1. 读取图片并进行编码 首先,可以使用file_get_contents()函数读取图片文件: $im…

    PHP 2023年5月26日
    00
  • php cli模式学习(PHP命令行模式)

    以下是关于“PHP CLI模式学习(PHP命令行模式)”的完整攻略。 什么是PHP CLI模式? CLI(Command Line Interface)模式是指在命令行(Windows下的cmd.exe或Linux、macOS下的终端)中运行PHP脚本,而非通过Web服务器(如Apache)来解析脚本。这意味着我们可以在不依赖Web服务器的情况下运行和测试P…

    PHP 2023年5月23日
    00
  • php 友好URL的实现(吐血推荐)

    我来为您详细讲解PHP友好URL的实现攻略。 什么是友好URL 友好URL(SEO URL,美化URL)是指通过对URL进行处理,使其更加美观,更容易让人理解,也更容易被搜索引擎收录的URL。友好URL是将原本的动态URL转化为静态的URL,用户在页面下方看到的URL都是静态的URL。例如将 http://www.example.com/index.php?…

    PHP 2023年5月27日
    00
  • php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】

    下面我将详细讲解php常用数组array函数实例总结。 1. 数组赋值的常用方式 1.1 直接赋值 通过直接赋值的方式来创建一个数组,包括两种形式: // 键值对数组 $arr1 = [‘name’ => ‘Tom’, ‘age’ => 18, ‘gender’ => ‘male’]; // 索引数组 $arr2 = [‘apple’, ‘…

    PHP 2023年5月26日
    00
  • PHP笛卡尔积实现原理及代码实例

    PHP笛卡尔积实现原理及代码实例 什么是笛卡尔积? 笛卡尔积,英文名Cartesian product,是一种组合数学中的基础概念,表示多个集合之间的组合。假设有两个集合A和B,取A中任意一个元素a,取B中任意一个元素b,则(a,b)组成了一个二元组,所有可能的二元组构成了A和B的笛卡尔积。举个例子,若A={1,2},B={a,b},则A和B的笛卡尔积为{(…

    PHP 2023年5月26日
    00
  • php实现将数据做成json的格式给前端使用

    一、如何将数据转换为JSON格式? 1.使用 PHP 的内置函数 json_encode(),该函数将 PHP 中的实例和数据转换为 JSON 格式: $data= array( ‘name’ => ‘张三’, ‘age’ => 25, ‘gender’ => ‘男’ ); echo json_encode($data); 上述代码中,我们…

    PHP 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部