下面我将给您详细讲解“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技术站