其实phpexcel这种使用广泛的类库的引用都是比较简单的,使用起来就是下载类库-》引用类-》和普通类一样实例化使用,但是属性和方法的说明还是要查资料的。所以就在这里写下了,慢慢补充。
1,下载类库
https://github.com/PHPOffice/PHPExcel
东西很多,核心是
,一般都是这样,文件夹中是一堆文件,外面一个文件算是入口文件,就引用并实例化外面这个类文件就好了
2,引用,原生自然是include,required或namaspace,
我用的是tp3的框架,把文件放到library->Vendor下,使用时只要vendor('PHPExcel.PHPExcel');就可以引用了
实例化$phpexcel = new \PHPExcel();
3,使用
//设置excel属性
$phpexcel->getProperties()
->setCreator("Maarten Balliauw")
->setLastModifiedBy("Maarten Balliauw")
->setTitle("Office 2007 XLSX Test Document")
->setSubject("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");
//设置sheet表名
$phpexcel->getActiveSheet()->setTitle('订单导出表');
//设置表数据
//批量直接导出
//$phpexcel->getActiveSheet()->fromArray($data);
//设置第一行的标题
$phpexcel->setActiveSheetIndex(0)->setCellValue('A1', '订单编号')->setCellValue('B1', '订单名称')
->setCellValue('C1', '订单价格')->setCellValue('D1', '联系人')->setCellValue('E1', '联系号码')
->setCellValue('F1', '下单时间')->setCellValue('G1', '下单ip')->setCellValue('H1', '订单状态')
->setCellValue('I1', '用户备注')->setCellValue('J1', '管理员备注');
//循环设置单元格的数据
foreach ($data as $k=>$v){
$num=$k+2;
$time=date('Y-m-d H:i',$v['create_time']);
//设置文本格式
$str=\PHPExcel_Cell_DataType::TYPE_STRING;
$phpexcel->setActiveSheetIndex(0)
->setCellValueExplicit('A'.$num, $v['oid'],$str)
->setCellValue('B'.$num, $v['name'])
->setCellValueExplicit('C'.$num, $v['tprice'],$str)
->setCellValue('D'.$num, $v['uname'])
->setCellValueExplicit('E'.$num, $v['utel'],$str)
->setCellValueExplicit('F'.$num, $time,$str)
->setCellValueExplicit('G'.$num, $v['ip'],$str)
->setCellValue('H'.$num, $status)
->setCellValue('I'.$num, $v['desc1'])
->setCellValue('J'.$num, $v['desc2']);
}
//在浏览器输出,就是为了弹出一个下载框
header('Content-Type: application/vnd.ms-excel');
header("Content-Disposition: attachment;filename=$filename");
header('Cache-Control: max-age=0');
header('Cache-Control: max-age=1');
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
$objwriter = \PHPExcel_IOFactory::createWriter($phpexcel, 'Excel5');
$objwriter->save('php://output');
4,属性方法说明
设置单元格数据
setCellValue('B'.$num, $v['name'])
指定单元格的文本格式,否则大数字就会被转出科学计数法了
这是文本格式
$str=\PHPExcel_Cell_DataType::TYPE_STRING;
setCellValueExplicit('E'.$num, $v['utel'],$str)
设置单元格大小?还没试过,以后补充
插入图片和设置单元格宽高
以上是2017年10份写的,用的是tp3.2,现在新项目用了tp5框架,要导出产品列表和出库入库单,对phpexcel的使用要更细致了,增加了导出图片和设置单元格样式
tp5使用惰性加载,基本每用到一个类都需要引入命名空间,
use PHPExcel_IOFactory;
use PHPExcel;
use PHPExcel_Cell_DataType;
use PHPExcel_Style_Border;
use PHPExcel_Worksheet_Drawing;
use PHPExcel_Style_Alignment;
直接上代码
ini_set('max_execution_time', '0');
$title='产品规格表'.date('Ymd');
$filename=$title.'.xls';
$phpexcel = new PHPExcel();
/*实例化插入图片类*/
$objDrawing = new PHPExcel_Worksheet_Drawing();
$dir=getcwd().'/upload/';
//设置文本格式
$str=PHPExcel_Cell_DataType::TYPE_STRING;
//设置第一个sheet
$phpexcel->setActiveSheetIndex(0);
$sheet= $phpexcel->getActiveSheet();
//设置sheet表名
$sheet->setTitle($title);
//A18到E22为对角的整个长方形区域合并
//$sheet->mergeCells('A18:E22');
// 水平居中(位置很重要,建议在最初始位置)
//$sheet->getStyle('A')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$sheet->getDefaultStyle()->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
//垂直居中
$sheet->getDefaultStyle()->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
//自动换行
$sheet->getDefaultStyle()->getAlignment()->setWrapText(true);
// 所有单元格默认高度
$sheet->getDefaultRowDimension()->setRowHeight(180);
$sheet->getDefaultColumnDimension()->setWidth(10);
//第一行
$sheet->getRowDimension('1')->setRowHeight(40);
//序号,单位,数量宽度设小以节约空间
$sheet->getColumnDimension('B')->setWidth(15);
$sheet->getColumnDimension('C')->setWidth(15);
$sheet->getColumnDimension('D')->setWidth(15);
$sheet->getColumnDimension('E')->setWidth(32);
$sheet->getColumnDimension('F')->setWidth(30);
$sheet->getColumnDimension('G')->setWidth(5);
//设置第一行
$i=1;
//设置入库记录表头
$sheet
->setCellValue('A'.$i, 'ID')
->setCellValue('B'.$i, '产品分类')
->setCellValue('C'.$i, '条码编号')
->setCellValue('D'.$i, '自编号')
->setCellValue('E'.$i, '产品图片')
->setCellValue('F'.$i, '产品名称--规格')
->setCellValue('G'.$i, '单位')
->setCellValue('H'.$i, '参考进价')
->setCellValue('I'.$i, '参考售价');
foreach($list as $k=>$v){
$i++;
$sheet
->setCellValueExplicit('A'.$i, $v['id'],$str)
->setCellValueExplicit('B'.$i, $v['cname'],$str)
->setCellValueExplicit('C'.$i, $v['sn'],$str)
->setCellValueExplicit('D'.$i, $v['sn0'],$str)
->setCellValueExplicit('F'.$i, $v['gname'].'--'.$v['attr'],$str)
->setCellValueExplicit('G'.$i, $v['unit'],$str)
->setCellValueExplicit('H'.$i, '¥'.$v['inprice'],$str)
->setCellValueExplicit('I'.$i, '¥'.$v['outprice'],$str);
if(is_file($dir.$v['pic'])){
/*设置图片路径 切记:只能是本地图片*/
$objDrawing = new PHPExcel_Worksheet_Drawing();
$objDrawing->setPath($dir.$v['pic']);
/*设置图片高度*/
$objDrawing->setHeight(200);//照片高度
$objDrawing->setWidth(200); //照片宽度
/*设置图片要插入的单元格*/
$objDrawing->setCoordinates('E'.$i);
/*设置图片所在单元格的格式*/
$objDrawing->setOffsetX(10);
$objDrawing->setOffsetY(10);
$objDrawing->setRotation(0);
$objDrawing->setWorksheet($sheet);
}
}
//***********************画出单元格边框*****************************
$styleArray = array(
'borders' => array(
'allborders' => array(
//'style' => PHPExcel_Style_Border::BORDER_THICK,//边框是粗的
'style' => PHPExcel_Style_Border::BORDER_THIN,//细边框
//'color' => array('argb' => 'FFFF0000'),
),
),
);
$sheet->getStyle('A1:I'.$i)->applyFromArray($styleArray);
//在浏览器输出
header('Content-Type: application/vnd.ms-excel');
header("Content-Disposition: attachment;filename=$filename");
header('Cache-Control: max-age=0');
header('Cache-Control: max-age=1');
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header ('Pragma: public'); // HTTP/1.0
$objwriter = PHPExcel_IOFactory::createWriter($phpexcel, 'Excel5');
$objwriter->save('php://output');
exit;