thinkphp 导出Excel文档,导入Excel文档;PHPExcel的使用

使用thinkphp框架导入Excel文档,已经是一个比较一般平常的功能了;  但很多时候自己还是会出错;所以这里记录一下我做的导入、导出文档功能。

在使用Excel导入导出前需要下载插件包 PHPExcel  地址:http://phpexcel.codeplex.com

下载后放到项目根目录Public文件里:


导出Excel文档:

第一种方法:

需要分页导出的话请自己加分页数;

public function excel(){

$task_user = M("user_from")->where($where)->limit($Page->firstRow.','.$Page->listRows)->order("'addtime desc,state asc'")->select();//先查询到数据

//导出数据为excel表格
include './Public/PHPExcel.php';
$excel = new PHPExcel();

//Excel表格式 
$letter = 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');
//表头数组
$tableheader = array('序号','用户姓名','电话','状态','时间');
for($i=0;$i<count($tableheader);$i++) {
$excel->getActiveSheet()->setCellValue("$letter[$i]1","$tableheader[$i]");
}

$mes=array(); 
for($i=0;$i<count($task_user);$i++){
$addtime= date('Y-m-d H:i',$task_user[$i]['addtime']); //时间
if($task_user[$i]['sstate']==1){
$state = '显示';
}else{
$state = '关闭';
}

$mes=array_merge($mes,array(
$i=>array(
'xuhao'=>$i+1,
'name'=>$task_user[$i]['name'],  //姓名
'phone'=>$task_user[$i]['phone'],//电话
'state'=>$state,        //状态
'addtime'=>$addtime    //时间
)
)); 
}

for ($i = 2;$i <= count($mes) + 1;$i++) {
$j = 0;
foreach ($mes[$i - 2] as $key=>$value){
$excel->getActiveSheet()
->setCellValue("$letter[$j]$i","$value");
$j++;
}
}
$write = new PHPExcel_Writer_Excel5($excel);
header("Pragma: public");
header("Expires: 0");
header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
header("Content-Type:application/force-download");
header("Content-Type:application/vnd.ms-execl");
header("Content-Type:application/octet-stream");
header("Content-Type:application/download");
header("Content-Disposition:attachment;filename=
用户表.xls");
header("Content-Transfer-Encoding:binary");
$write->save('php://output');

   exit;

}

第二种方法:

public function excel(){

$task_user = M("user_from")->where($where)->limit($Page->firstRow.','.$Page->listRows)->order("'addtime desc,state asc'")->select();//先查询到数据

//导出数据为excel表格
include './Public/PHPExcel.php';
$excel = new PHPExcel();

//表头数组
$tableheader = array('序号','用户姓名','电话','状态','时间');

$mes=array(); 
for($i=0;$i<count($task_user);$i++){
$addtime= date('Y-m-d H:i',$task_user[$i]['addtime']); //时间
if($task_user[$i]['sstate']==1){
$state = '显示';
}else{
$state = '关闭';
}
$mes=array_merge($mes,array(
$i=>array(
'xuhao'=>$i+1,
'name'=>$task_user[$i]['name'],  //姓名
'phone'=>$task_user[$i]['phone'],//电话
'state'=>$state,        //状态
'addtime'=>$addtime    //时间
)
)); 
}

$names = '申请任务管理';

$this->put_csv($mes,$tableheader,$names);
exit;

}

/**
*导出csv文件
*@param $list array 导出的二维数组内容
*@param $title array 顶部的title 一维数组
*@param $name array 导出csv的文件名称
**/
public function put_csv($list,$title,$name){
$file_name=$name.".csv";
header ( 'Content-Type: application/vnd.ms-excel' );
header ( 'Content-Disposition: attachment;filename='.$file_name );
header ( 'Cache-Control: max-age=0' );
$file = fopen('php://output',"a");
$limit=1000;
$calc=0;
foreach ($title as $v){
$tit[]=iconv('UTF-8', 'GB2312//IGNORE',$v);
}
fputcsv($file,$tit);
foreach ($list as $v){
$calc++;
if($limit==$calc){
ob_flush();
flush();
$calc=0;
}
foreach ($v as $t){
$tarr[]=iconv('UTF-8', 'GB2312//IGNORE',$t);
}
fputcsv($file,$tarr);
unset($tarr);
}
unset($list);
fclose($file);
exit;
}

这里说明csv:

        csv 文件最早用在简单的数据库里,由于其格式简单,并具备很强的开放性,所以起初被扫图家用作自己图集的标记。csv文件是个纯文本文件,每一行表示一张图片的许多属性。你在收一套图集时,只要能找到它的 csv 文件,用专用的软件校验后,你对该图集的状况就可以了如指掌。
每行相当于一条记录,是用“,”分割字段的纯文本数据库文件。


导入Excel文档:

//Excel导入
public function excel_volume(){
$user = M("user"); //表
if($_FILES['file'] and $_FILES['file']['error']==0){
$nameend = end(explode('.', $_FILES['file']['name']));
if($nameend=='xls'){
Vendor('ExcelReader.reader');
$Reader = new Spreadsheet_Excel_Reader();
$Reader->setOutputEncoding('utf-8');
$Reader->read($_FILES['file']['tmp_name']);//得到导入文件
$sheets = $Reader->sheets;
$countsh = count($sheets[0]['cells']); //要导入数据
$array = array();
//将要导入的数据变成一个个以为数组
for($i=0;$i<$countsh;$i++){
if($sheets[0]['cells'][$i+1][1]){
$date['name'] = $sheets[0]['cells'][$i+1][1]; //名称
$date['phone'] = $sheets[0]['cells'][$i+1][2];//电话
$date['addtime'] = str_replace("\\", "",str_replace("\&quot;", "", $sheets[0]['cells'][$i+1][3])); //时间
$date['state'] = $sheets[0]['cells'][$i+1][4];    //状态 1开启/0关闭
}//名称、电话、时间、状态 不能为空
if($date['sk_name']!='' && $date['sk_addtime']!='' && $date['sk_addtime']>time() && $date['sk_state']!=''){
$user->add($date);//写入数据库
}
}
echo "导入成功。";
} else {
$this->error('请上传后缀名为.xls的文件');exit;
}
}
header('Location:/index.php/Index/user_admini');
}

到这里文档就导入成功了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值