php讲表数据导出excle,PHPexcel将数据库表导出excel

前瞻

本文档需求:在有的时候,需要将显示的列表数据导出excel进行操作,比如:log日志,调查问卷等。本文将举例将log日志导出:

框架:thinkphp3.2

正文:

前期准备:

百度搜索phpexcel,找到官网,如下:

ba1cae113e66

进入官网,点击download

ba1cae113e66

解压(应该有几个文件夹,只需要PHPexcel文件即可)

也可以去我网盘拉下来链接:http://pan.baidu.com/s/1dEZtkBn 密码:582d

将文件夹PHPexcel放到项目路径\ThinkPHP\Library\Vendor下(方便调用,如果放在别的地方用include能够引用到PHPexcel.php就可以)

开始程序

在使用到的控制器中添加如下代码:

//页面

导出向导:

导出excle

//添加规则function output(){

var bid = $( "input[name='bid']" ).val();

var eid = $( "input[name='eid']" ).val();

url = 'output/bid/'+bid+'/eid/'+eid;//这个url自己根据情况自己拼接就可以了,我这里是跳转到控制器文件的output方法

location.href = url;

}

//控制器文件

/**

*

*日志导出为excel

* @param int $begin 开始id

* @param int $end 结束id

*/

public function output() {

//导出商家信息Excel

$begin = I('get.bid');

$end = I('get.eid');

$xlsName = "log";

//此处设置的是excel表的头部标题那一样,这块需要注意log_id,operator这些要和数据库的字段对应,操作用户,操作用户ip等根据需要自己编辑,和列表的

一样就可以

$xlsCell = array(

array('log_id', 'ID'),

array('operator', '操作用户'),

array('ip', '操作用户ip'),

array('msg', '操作描述'),

array('id', '操作id'),

array('func', '操作标题'),

array('time', '操作时间'),

);

$condition['log_id'] = array(between,array($begin,$end));

//$log的数据要是个二维关联数组,key的值要和$xlsCell的对应,只有对应上的才有数据,我的数据表存的是json数据,所以需要转化下(下面有我的数据表),正常数据情况下,直接select的数据就可以使用,不用改变

$log = M('Log')->where($condition)->order('log_time')->select();

//将log_desc字段的json数据取出来(注意:数据还是二维数组)

foreach( $log as $k=>$vo ) {

$vo['log_desc'] = json_decode( $vo['log_desc'] );

$log[$k]['operator'] = $vo['log_desc']->operator;

$log[$k]['ip'] = $vo['log_desc']->ip;

$log[$k]['msg'] = $vo['log_desc']->msg;

$log[$k]['id'] = $vo['log_desc']->id;

$log[$k]['func'] = $vo['log_desc']->func;

$log[$k]['time'] = date('Y-m-d H:i:s',$vo['log_desc']->time);

unset($log[$k]['log_desc']);

unset($log[$k]['log_time']);

}

$this->exportExcel($xlsName, $xlsCell, $log);

}

//所有日志表格导出模板

public function exportExcel($expTitle, $expCellName, $expTableData) {

$xlsTitle = iconv('utf-8', 'gb2312', $expTitle); //文件名称

$fileName = 'log日志表' . date('_YmdHis'); //or $xlsTitle 文件名称可根据自己情况设定

$cellNum = count($expCellName);

$dataNum = count($expTableData);

vendor("PHPExcel.PHPExcel");//此处开始调用phpexcel类,如果放置目录不和我的一样,那就用include_once调用即可

$objPHPExcel = new\PHPExcel();

$cellName = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ');

$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(22);

$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(10);

$objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(10);

$objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(15);

$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(10);

$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(15);

$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(20);

$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(15);

$objPHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(20);

$objPHPExcel->getActiveSheet()->getColumnDimension('J')->setWidth(10);

$objPHPExcel->getActiveSheet()->getColumnDimension('K')->setWidth(20);

$objPHPExcel->getActiveSheet()->getColumnDimension('L')->setWidth(20);

$objPHPExcel->getActiveSheet()->getColumnDimension('M')->setWidth(25);

$objPHPExcel->getActiveSheet()->getColumnDimension('L')->setWidth(22);

$objPHPExcel->getActiveSheet()->getColumnDimension('M')->setWidth(12);

$objPHPExcel->getActiveSheet()->getColumnDimension('N')->setWidth(15);

$objPHPExcel->getActiveSheet(0)->mergeCells('A1:' . $cellName[$cellNum - 1] . '1');//合并单元格

$objPHPExcel->getActiveSheet()->setCellValue('A1', 'log日志表')->getStyle()->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

for ($i = 0; $i < $cellNum; $i++) {

$objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i].'2', $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 + 3), " ".$expTableData[$i][$expCellName[$j][0]]);

}

}

ob_end_clean(); //清除缓冲区,避免乱码

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');

$objWriter->save('php://output');

exit;

}

我的数据表

ba1cae113e66

下面这种数据表就不需要了修改了,查询出来就可以

ba1cae113e66

代码完成,点击导出就可以了

ba1cae113e66

ba1cae113e66

注意

如果excel不出现数据,差看下面是否与数据库字段对应上

$xlsCell = array(

array('log_id', 'ID'),

array('operator', '操作用户'),

array('ip', '操作用户ip'),

array('msg', '操作描述'),

array('id', '操作id'),

array('func', '操作标题'),

array('time', '操作时间'), );

如果不是使用的tp框架,把文件放入项目之后,自己在下方使用include,include_once等引入即可,根据框架使用查询语言获取数据,原生的也是一样的

ba1cae113e66

如果导出数据之后,excel的中文数据都是FALSE,应该是字符集的问题,设置utf-8格式就可以了,应该和下面对应就行

ba1cae113e66

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值