使用composer安装phpexcel:
composer require phpoffice/phpexcel
安装完成后,你会发现,wendor目录下多出来了phpoffice/phpexcel/...文件夹。
使用步骤:
1、实例化PHPExcel类 - 相当于新建一个excel表格
2、调用类里面的以下方法:
1)createSheet()方法 - 创建一个sheet
2)setActiveSheetIndex()方法 - 指定需要操作的是那个sheet
3)getActiveSheet()方法 - 获得当前活动状态的工作表,返回工作表对象
3、填充数据:setCellValue()方法
4、保存文件:PHPExcel_IOFactory::createWriter()方法、save()方法。
使用前,需要类的前面加上:
use \PHPExcel; use \PHPExcel_IOFactory;
真是开发例子如下,更多的使用请看官方包里面的例子:
<?php namespace app\admin\controller; use think\Controller; //use think\Request; use \PHPExcel; use \PHPExcel_IOFactory; class Export extends Controller //Common的父类是Controller,Controller有自己的构造方法。 { public function exportOrder() { $res = [ 'order_id' => 'desc', ]; $orderList = db('order')->order($res)->limit(10000)->select(); $objPHPExcel = new PHPExcel();//创建一个新的excel文档 $objSheet = $objPHPExcel->getActiveSheet();//获取当前操作sheet的对象 $objSheet->setTitle('demo');//设置当前sheet的标题 //设置第一栏的标题 $objSheet->setCellValue('A1', '订单编号') ->setCellValue('B1', '公司名称') ->setCellValue('C1', '订单号') ->setCellValue('D1', '金额') ->setCellValue('E1', '付款时间') ->setCellValue('F1', '平台订单号'); //第二行起,每一行的值 foreach ($orderList as $k => $val) { $k = $k+2; $objSheet->setCellValue('A'.$k, $val['order_id']) ->setCellValue('B'.$k, $val['company']) ->setCellValue('C'.$k, $val['out_trade_no'].' ') ->setCellValue('D'.$k, $val['total_fee']) ->setCellValue('E'.$k, date('Y-m-d H:i:s', $val['time_end'])) ->setCellValue('F'.$k, $val['transaction_id']); } //xls为Excel5,xlsx为Excel2007。要输出什么格式就设置什么。 $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->save('php://output'); //通过php保存在本地的时候需要用到 //$objWriter->save($dir.'/demo.xlsx'); /** * 设置输出的为excel03还是07,需要对应上面的PHPExcel_IOFactory::createWriter()进行使用 */ //header('Content-Type: application/vnd.ms-excel'); //excel2007格式(即xlsx),03或07只能选择一种。 header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); //设置输出xls/xlsx的名称。 header("Content-Disposition: attachment;filename="."order-".date('Y-m-d').".xlsx"); header('Cache-Control: max-age=0');//禁止缓存 /** * 以下为需要用到IE时候的设置 */ // If you're serving to IE 9, then the following may be needed //header('Cache-Control: max-age=1'); // If you're serving to IE over SSL, then the following may be needed //header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past //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 exit; } }
————这里说明一下:
$k = $k+2,因为数组角标是0开始的,而我foreach的数据需要从第2行开始。
$val['out_trade_no']后面加上.' ',是因为输出在excel的时候,后四位会变成0000,所以加了个空格就变成字符串了。
这里,我需要提一下,为什么刚开始的时候我一直不成功,原因有两个:
1、只引入了use PHPExcel; 未引入use \PHPExdcel_IOFactory;看了日志才恍然大悟。所以需要多看日志啊。
2、引入use \PHPExdcel_IOFactory;demo成功了,但是项目不成功。是因为我一直放在了User、Order等控制器下,而这些控制器都是继承了Common控制器的,有初始化函数,所以一直无法执行。直到我把继承Common改成了Controller,成功了,然后才发现了的。
————占位符