700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > php读取excel公式取值 通用PHPExcel导出函数代码

php读取excel公式取值 通用PHPExcel导出函数代码

时间:2019-12-21 17:31:24

相关推荐

php读取excel公式取值 通用PHPExcel导出函数代码

先在网上找到一个PHPExcel的类库来用。

通用PHPExcel导出excel函数代码

公用函数:/**

*数据表导出excel

*

*@authorrainfer<81818832@>

*

*@paramstring$table,不含前缀表名,必须

*@paramstring$file,保存的excel文件名,默认表名为文件名

*@paramstring$fields,需要导出的字段名,默认全部,以半角逗号隔开

*@paramstring$field_titles,需要导出的字段标题,需与$field一一对应,为空则表示直接以字段名为标题,以半角逗号隔开

*@paramstting$tag,筛选条件以字符串方式传入,例:"limit:0,8;order:post_datedesc,listorderdesc;where:id>0;"

*limit:数据条数,可以指定从第几条开始,如3,8(表示共调用8条,从第3条开始)

*order:排序方式,如:post_datedesc

*where:查询条件,字符串形式,和sql语句一样

*/

functionexport2excel($table,$file='',$fields='',$field_titles='',$tag=''){

//处理传递的参数

if(stripos($table,C('DB_PREFIX'))==0){

//含前缀的表,去除表前缀

$table=substr($table,strlen(C('DB_PREFIX')));

}

$file=empty($file)?C('DB_PREFIX').$table:$file;

$fieldsall=M($table)->getDbFields();

$field_titles=empty($field_titles)?array():explode(",",$field_titles);

if(empty($fields)){

$fields=$fieldsall;

//成员数不一致,则取字段名为标题

if(count($fields)!=count($field_titles)){

$field_titles=$fields;

}

}else{

$fields=explode(",",$fields);

$rst=array();

$rsttitle=array();

$title_y_n=(count($fields)==count($field_titles))?true:false;

foreach($fieldsas$k=>$v){

if(in_array($v,$fieldsall)){

$rst[]=$v;

//一一对应则取指定标题,否则取字段名

$rsttitle[]=$title_y_n?$field_titles[$k]:$v;

}

}

$fields=$rst;

$field_titles=$rsttitle;

}

//处理tag标签

$tag=param2array($tag);

$limit=!empty($tag['limit'])?$tag['limit']:'';

$order=!empty($tag['order'])?$tag['order']:'';

$where=array();

if(!empty($tag['where'])){

$where['_string']=$tag['where'];

}

//处理数据

$data=M($table)->field(join(",",$fields))->where($where)->order($order)->limit($limit)->select();

import("Org.Util.PHPExcel");

error_reporting(E_ALL);

date_default_timezone_set('Europe/London');

$objPHPExcel=new\PHPExcel();

import("Org.Util.PHPExcel.Reader.Excel5");

/*设置excel的属性*/

$objPHPExcel->getProperties()->setCreator("rainfer")//创建人

->setLastModifiedBy("rainfer")//最后修改人

->setKeywords("excel")//关键字

->setCategory("resultfile");//种类

//第一行数据

$objPHPExcel->setActiveSheetIndex(0);

$active=$objPHPExcel->getActiveSheet();

foreach($field_titlesas$i=>$name){

$ck=num2alpha($i++).'1';

$active->setCellValue($ck,$name);

}

//填充数据

foreach($dataas$k=>$v){

$k=$k+1;

$num=$k+1;//数据从第二行开始录入

$objPHPExcel->setActiveSheetIndex(0);

foreach($fieldsas$i=>$name){

$ck=num2alpha($i++).$num;

$active->setCellValue($ck,$v[$name]);

}

}

$objPHPExcel->getActiveSheet()->setTitle($table);

$objPHPExcel->setActiveSheetIndex(0);

header('Content-Type:application/vnd.ms-excel');

header('Content-Disposition:attachment;filename="'.$file.'.xls"');

header('Cache-Control:max-age=0');

$objWriter=\PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel5');

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

exit;

}

用到的2个函数:

/**

*生成参数列表,以数组形式返回

*@authorrainfer<81818832@>

*/

functionparam2array($tag=''){

$param=array();

$array=explode(';',$tag);

foreach($arrayas$v){

$v=trim($v);

if(!empty($v)){

list($key,$val)=explode(':',$v);

$param[trim($key)]=trim($val);

}

}

return$param;

}

/**

*数字到字母列

*@authorrainfer<81818832@>

*/

functionnum2alpha($intNum,$isLower=false){

$num26=base_convert($intNum,10,26);

$addcode=$isLower?49:17;

$result='';

for($i=0;$i

$code=ord($num26{$i});

if($code

$result.=chr($code+$addcode);

}else{

$result.=chr($code+$addcode-39);

}

}

return$result;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。