PHP EXCEL
使用php导出excel,这里有两个方法,一个就是使用官方的库,一个就是立竿见影的;
我来介绍下吧,第一个是使用简便的方法:
1、模拟xls文件;
只需要几行代码就OK啦,先贴代码再解释:
上面的最简便的方法了,拷贝这个函数,然后传入数据$data为二维数组就行了,意思就是直接选出数据库的数据,然后调用这个函数就可以显示了;
第二种方法,这个就是官方渠道了,需要下载官方的类库;
2、使用PHPExcel类库;
步骤1、下载官方类库PHPExcel;下载地址: http://phpexcel.codeplex.com/releases/view/26478
步骤2、将包解压后放到获取Classes/PHPExcel.php;
步骤3、然后引用开始导出数据;
这里我封装好了一个类可以直接使用;
我使用的是ThinkPHP框架,包放在ThinkPHP/Extends/Vendor/下,所以引用是使用的vendor('......');
然后使用需要传入以下参数来调用:
这里我封装了下,所以支持多个sheet的导出,如果只需一个sheet只需要写一个就行了,上面我写了三个!
到这里就介绍这两中方法了。
我来介绍下吧,第一个是使用简便的方法:
1、模拟xls文件;
只需要几行代码就OK啦,先贴代码再解释:
function excel($data){
header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=list.xls"); // 表名
header("Pragma: no-cache"); // 缓存
header("Expires: 0");
$sepcol = " \t "; // 分列;
$sepbr = "\n"; // 分行
foreach ($data as $key) {
foreach ($key as $value) { // 一行
echo mb_convert_encoding($value,"GBK","utf-8").$sepcol; // 分列
}
echo $sepbr;//分行
}
exit;
}
上面的最简便的方法了,拷贝这个函数,然后传入数据$data为二维数组就行了,意思就是直接选出数据库的数据,然后调用这个函数就可以显示了;
第二种方法,这个就是官方渠道了,需要下载官方的类库;
2、使用PHPExcel类库;
步骤1、下载官方类库PHPExcel;下载地址: http://phpexcel.codeplex.com/releases/view/26478
步骤2、将包解压后放到获取Classes/PHPExcel.php;
步骤3、然后引用开始导出数据;
这里我封装好了一个类可以直接使用;
function clin_excel_out($data){
vendor('PHPExcel.Classes.PHPExcel');
$objPHPExcel = new PHPExcel();
$objPHPExcel->getProperties()->setCreator("Da")
->setLastModifiedBy("Da")
->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");
$objPHPExcel->getActiveSheet()->getDefaultColumnDimension()->setWidth(15);//单元格宽度
$objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setName('Arial');//设置字体
$objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setSize(10);//设置字体大小
$sheet = 0;
foreach ($data['content'] as $key => $content) { // sheet
if( $sheet > 0){
$objPHPExcel->createSheet();
}
$objPHPExcel->setActiveSheetIndex($sheet);
$objPHPExcel->getActiveSheet($sheet)->setTitle($key);// sheet标题
$row = 1;
foreach ($content as $key => $info) { // 行
$column = 0;
foreach ($info as $value) { // 列
$cn = chr(ord('A')+ (int)$column );
$cell = $cn.$row;
$objPHPExcel->getActiveSheet($sheet)->setCellValue($cell,$value); //内容
$column ++;
}
$row ++;
}
$sheet ++;
}
//头部输出
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$data['filename'].'_'.date("YmdHis").'.xls"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
exit;
}
我使用的是ThinkPHP框架,包放在ThinkPHP/Extends/Vendor/下,所以引用是使用的vendor('......');
然后使用需要传入以下参数来调用:
function test(){
$data['filename'] = '测试表';
$list = D('User')->select();
$data['content']['用户'] = $list; // sheet1 名字'用户' 类容 list
$data['content']['hehe'] = $list; // sheet2 名字'用户' 类容 list
$data['content']['hello'] = $list; // sheet3 名字'用户' 类容 list
// var_dump($data);
clin_excel_out($data);
}
这里我封装了下,所以支持多个sheet的导出,如果只需一个sheet只需要写一个就行了,上面我写了三个!
到这里就介绍这两中方法了。