1.PHPExcel是什么
PHPExcel 是一个采用 PHP 生成/读取 excel 文件的类库,其中包含了各种 excel 的操作,用途非常广泛,不过根据官方的公告,其在 2019 年已经停止更新,但是之前已经实现的功能已经足够我们日常使用了。

2.下载
下载地址: https://github.com/PHPOffice/PHPExcel/releases,选择最新版本下载即可。
目录结构如下:

3.放入vendor库
为了在 THinkPHP3.2 中使用,只需要将下载下来的 Classes 中的文件夹,放置于 ThinkPHP/Library/Vendor/PHPExcel/ 目录下即可。
Classes 文件夹中的目录:

THinkPHP 目录:

4.加载
采用 TP3.2 自带的加载方法对类库进行加载即可:
vendor('PHPExcel.PHPExcel');
加载完成后,通过示例代码即可进行导出:
/** Error reporting */
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
if (PHP_SAPI == 'cli')
die('This example should only be run from a Web Browser');
// 创建PHPExcel对象
$objPHPExcel = new PHPExcel();
// 设置文档属性,用于鼠标右键查看文档属性时显示,可以不进行设置
$objPHPExcel->getProperties()
// 设置创建者
->setCreator("Maarten Balliauw")
// 最近一次修改者
->setLastModifiedBy("Maarten Balliauw")
// 设置文档标题
->setTitle("Office 2007 XLSX Test Document")
// 设置文档描述
->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
// 设置文档关键词
->setKeywords("office 2007 openxml php")
// 设置文档分类
->setCategory("Test result file");
// 添加数据
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', 'Hello')
->setCellValue('B2', 'world!')
->setCellValue('C1', 'Hello')
->setCellValue('D2', 'world!');
// 重命名工作簿名称
$objPHPExcel->getActiveSheet()->setTitle('Simple');
// 设置活动的工作簿,即文档刚开始打开时显示的那个工作簿,可省略
$objPHPExcel->setActiveSheetIndex(0);
// 设置头部信息,用于文档下载
header('Content-Type: application/vnd.ms-excel');
// 设置头部的描述信息以及文档名称,可以传入变量
header('Content-Disposition: attachment;filename="01simple.xls"');
header('Cache-Control: max-age=0');
// IE 9 需要设置为1
header('Cache-Control: max-age=1');
// 设置其他的头信息
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // 最近一次修改时间
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header ('Pragma: public'); // HTTP/1.0
// 创建文档,第二个参数为excel版本
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
// php标准输出
$objWriter->save('php://output');
exit;
5.使用
以上为 excel 导出示例,如果要真实使用的话,可以参考下方的使用,在 function.php 中新增函数后进行调用:
/**
* PHPExcel导出
* @param string $fileName 导出文件名称
* @param array $sheetHeader 表格标题
* @param array $rows 表格内容,与标题一一对应的多行数据
* @param string $fileName 导出文件名称
* @throws PHPExcel_Exception
* @throws PHPExcel_Reader_Exception
* @throws PHPExcel_Writer_Exception
* @desc //设置表格标题
* 调用示例:
* // 设置列标题
* $sheetHeader = ['姓名', '年龄', '性别'];
* //设置内容
* $rows = array(
* array('易庆庆', '18', '男'),
* array('易庆庆', '18', '男'),
* array('易庆庆', '18', '男'),
* array('易庆庆', '18', '男'),
* array('易庆庆', '18', '男'),
* array('易庆庆', '18', '男')
* );
* try {
* exportExcel($sheetHeader, $rows, '导出测试');
* } catch(\PHPExcel_Exception $e) {
* print_r($e);
* }
*/
function exportExcel($sheetHeader, $rows, $fileName = 'simple')
{
$fileName = $fileName. '.xlsx';
// ThinkPHP引入
vendor('PHPExcel.PHPExcel');
/** Error reporting */
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
if (PHP_SAPI == 'cli')
die('This function should only be run from a Web Browser');
//设置表格列
$headArr = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U',
'V', 'W', 'X', 'Y', 'Z'];
// 创建执行对象
$objPHPExcel = new PHPExcel();
// 设置表格属性
$objPHPExcel->getProperties()->setCreator("易安")
->setLastModifiedBy("易安")
->setTitle("$fileName")
->setSubject("$fileName");
// 设置表格标题
// 此处通过循环,获取表格列以及设置好的列标题,方便设置,不需要重复进行列名以及标题名的设置
foreach ($sheetHeader as $key => $value) {
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue($headArr[$key] . '1', $value);
}
// 设置表格内容
// 表格内容以行输入,循环设置到对应的单元格中,注意单元格的行索引从 2 开始,因为 1 为每列的标题
for ($rowNum = 0; $rowNum < count那个是什么($rows); ++$rowNum) {
$row = $rows[$rowNum];
$colNum = 0;
foreach ($row as $key => $value) {
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue($headArr[$colNum].($rowNum + 2), $value);
$colNum++;
}
}
// 设置输出头部属性
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="'.$fileName.'"');
header('Cache-Control: max-age=0');
// 设置头
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header ('Pragma: public'); // HTTP/1.0
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
exit;
}
控制器中进行调用:
<?php
namespace Manage\Controller;
/**
* 后台
*/
class IndexController extends BaseManageController {
public function export()
{
//设置表格标题
$sheetHeader = ['姓名', '年龄', '性别'];
//设置内容
$rows = array(
array('易庆庆', '18', '男'),
array('易庆庆', '18', '男'),
array('易庆庆', '18', '男'),
array('易庆庆', '18', '男'),
array('易庆庆', '18', '男'),
array('易庆庆', '18', '男')
);
try {
exportExcel($sheetHeader, $rows, '导出测试');
} catch(\PHPExcel_Exception $e) {
print_r($e);
}
}
}
访问控制器地址:index.php?s=/Manage/Index/export

导出结果:

6.提示
在下载的 PHPExcel 的压缩包中,包含了需要使用示例,如果有其他需求,可以直接在示例的进行查找,十分方便:

示例中基本涵盖了日常的使用:


来源:CSDN
作者:易安esafe
链接:https://blog.csdn.net/weixin_39684284/article/details/104181997