写项目过程中,需要使用excel导出功能(暂未有导入),特此以此博客记录,也是在之前别人写的基础上复制粘贴
HTML部分:$formget.keyword为搜索关键字
控制器使用$_GET,$_POST获取搜索关键字
$this->assign ( "formget", array_merge ( $_GET, $_POST ) );
<form class="well form-search" method="post" action="{:U('AdminCollect/index')}">
关键字:
<input type="text" name="keyword" style="width: 200px;" value="{$formget.keyword|default=''}" placeholder="请输入关键字...">
时间:
<input type="text" name="start_time" class="js-datetime" value="{$formget.start_time|default=''}" style="width: 120px;" autocomplete="off">-
<input type="text" class="js-datetime" name="end_time" value="{$formget.end_time|default=''}" style="width: 120px;" autocomplete="off">
<input type="submit" class="btn btn-primary" value="搜索" />
<a class="btn btn-danger" href="{:U('AdminCollect/index')}">清空</a>
</form>
<form class="form-search pull-right" method="post" action="{:U('AdminCollect/expExcel')}">
<input type="hidden" name="keyword" value="{$formget.keyword|default=''}">
<input type="submit" class="btn btn-mini btn-primary" value="导出到EXCEL" />
</form>
Controller部分
public function expExcel() {
$xlsName = "用户收藏";
$xlsCell = array (
array ( 'id', '序号' ),
array ( 'activity_title', '活动名称' ),
array ( 'shop_name', '商家名称' ),
array ( 'collect_time', '收藏时间' ),
);
$field = 'id,activity_title,shop_name,collect_time';
$shop_name=I('request.keyword');
if(!empty($shop_name)){
$where['activity_title|shop_name']=array('like',"%$shop_name%");
}
$where['status']=array('eq',1);
// 导出所有的内容
$xlsData = $this->collect_model
->where($where)
->Field ($field)
->order(array("id" => "DESC"))
->select();
foreach ( $xlsData as $k => $v ) {
$xlsData[$k]['collect_time']=date('Y-m-d H:i:s',$v['collect_time']);
}
$this->exportExcel ( $xlsName, $xlsCell, $xlsData );
}
private function exportExcel($expTitle, $expCellName, $expTableData) {
$xlsTitle = iconv ( 'utf-8', 'gb2312', $expTitle ); // 文件名称
$fileName = $xlsTitle.date ( 'YmdHis' );
$cellNum = count ( $expCellName );
$dataNum = count ( $expTableData );
//vendor中放入PHPExcel类
vendor ( "PHPExcel.PHPExcel" );
$objPHPExcel = new \PHPExcel ();
$cellName = array (
'A', 'B', 'C', 'D'
);
$objPHPExcel->getActiveSheet ()->getColumnDimension ( 'A' )->setWidth ( 10 );
$objPHPExcel->getActiveSheet ()->getColumnDimension ( 'B' )->setWidth ( 50 );
$objPHPExcel->getActiveSheet ()->getColumnDimension ( 'C' )->setWidth ( 30 );
$objPHPExcel->getActiveSheet ()->getColumnDimension ( 'D' )->setWidth ( 20 );
for($i = 0; $i < $cellNum; $i ++) {
$objPHPExcel->setActiveSheetIndex ( 0 )->setCellValue ( $cellName [$i] . '1', $expCellName [$i] [1] );
}
// Miscellaneous glyphs, UTF-8
for($i = 0; $i < $dataNum; $i ++) {
for($j = 0; $j < $cellNum; $j ++) {
$objPHPExcel->getActiveSheet ( 0 )->setCellValue ( $cellName [$j] . ($i + 2), $expTableData [$i] [$expCellName [$j] [0]] );
}
}
header ( 'pragma:public' );
header ( 'Content-type:application/vnd.ms-excel;charset=utf-8;name="' . $xlsTitle . '.xls"' );
header ( "Content-Disposition:attachment;filename=$fileName.xls" ); // attachment新窗口打印inline本窗口打印
$objWriter = \PHPExcel_IOFactory::createWriter ( $objPHPExcel, 'Excel5' ); // Excel5为xls格式,excel2007为xlsx格式
$objWriter->save ( 'php://output' );
exit ();
}