1.如何下载PHPExcel插件
要求:PHP版本不能太低,否则可能会有适配问题,最好5.3以上
去官网下载插件:https://github.com/PHPOffice/PHPExcel.git
下载完成后我们只需要里面的Classes目录文件,包含类库以及相关实例
将其改名为PHPExcel
2.使用PHPExcel
- 一个表格对应一个PHPExcel实例化对象,因此想导出数据就得先创建一个表格,即创建一个实例化对象:
require("./PHPExcel/PHPExcel.php");
$obj = new PHPExcel();
- 每个表格里面可以创建多个内置表(即sheet),因此需要在各个内置表中切换。创建切换内置表总共需要使用三个方法,如下:
1)createSheet() //创建一个内置表
2)setActiveSheetIndex() //设置当前活跃的(需要操作的)内置表
3)getActiveSheet //获取当前活跃内置表操作对象
3.填充表格数据
1)傻白甜填法:
每一个setCellValue方法都是设置同一行的数据,如下则默认填充某行第一格和第二格数据
$objSheet->setCellValue('A1','姓名')->setCellValue('B1','年龄');
$objSheet->setCellValue('A2','MClink')->setCellValue('B2','18');
$objSheet->setCellValue('A3','MClink2')->setCellValue('B3','19');
结果如下:
姓名 | 年龄 |
---|---|
MClink | 18 |
MClink2 | 19 |
2)数组填充法
$array = [
['姓名','年龄'], //第一行
['Mlcink','18'], //第二行
['Crayon','99'] //第三行
];
$objSheet->fromArray($array);
结果如下:
姓名 | 年龄 |
---|---|
MClink | 18 |
Crayon | 99 |
其中最大的数组指定的是当前sheet,即当前活跃sheet可以看成一个大array,然后PHPExcel会按顺序读取这个大数组里面的每一个数组,即使为空。所以如果想让第一行空着不填,给个空数组即可。
两种填充方式其实各有优点:
傻白甜填法对于一些需要样式的单元格来说更有优势,而且对于一些数据量较大的表格,如果采用数组填充法,一次性载入那么大的数据,很容易造成内存不足,导致PHP脚本终止。所以,具体情况还得具体分析使用。
4.保存修改,生成文件
$objWriter = PHPExcel_IOFactory::createWriter($obj,'Excel2007');//参数写入
$objWriter->save('./demo.xlsx');//保存到当前目录的demo.xlsx中
给一个较为完整的小栗子:
在默认情况下,当我们创建好一个excel对象后,会自动生成一个sheet,也是当前活跃的sheet,因此我们可以直接获取sheet对象
<?php
require("./PHPExcel/PHPExcel.php"); //载入类
$obj = new PHPExcel(); //实例化PHPExcel工具类
$objSheet = $obj->getActiveSheet(); //获取当前活跃的sheet的操作对象
$objSheet->setTitle('demo');//给当前的sheet创建名称
// $objSheet->setCellValue('A1','姓名')->setCellValue('B1','年龄');
// $objSheet->setCellValue('A2','Mclink')->setCellValue('B2','18');
$array = [
['姓名','年龄'],
['Mlcink','18'],
['Crayon','99']
];
$objSheet->fromArray($array);
$objWriter = PHPExcel_IOFactory::createWriter($obj,'Excel2007');//参数写入
$objWriter->save('./demo2.xlsx');//保存