php 和thinkphp 对excel操作

php对excel的操作主要通过引入 excel_reader2.php 或者是PHPExcel 类进行   两个文件自行下载

php 对其读操作:

 文件目录结构  

excel_reader2.php  在网上进行下载

代码:

  <html>
  <head>
   <style>
     table td{border:2px solid red;padding:2px;}
	 table{}
   </style>
  </head>
   <body>
   <?php
  error_reporting(E_ALL ^ E_NOTICE);
  require_once 'excel_reader2.php';  //引入excel类
  $data = new Spreadsheet_Excel_Reader("test.xls");  //获取将要读取的excel文档
  echo $data->sheets[0]['numRows'];  //获得excel中的总表格数
  echo  "<table style='border:2px solid red;'>";
   for ($i = 1; $i < $data->sheets[0]['numRows']; $i++) //从一开始计数
     {
	   echo "<tr style='border:2px solid red;'>";
       echo "<td>" .$data->sheets[0]['cells'][$i][1]."</td><td>".
          $data->sheets[0]['cells'][$i][2]."</td><td>".    //班级
      $data->sheets[0]['cells'][$i][3]."</td><td> " . //姓名
      $data->sheets[0]['cells'][$i][4]. "</td><td> " .   //性别
      $data->sheets[0]['cells'][$i][5]."</td>" ;   //班内序号
	  echo "</tr>";
     }
 echo "</table>";
 ?>
   </body>
 </html>

运行结果:


php进行写操作: 这样结果是直接提供下载

<?php 
echo "ok";
header("Content-type:application/vnd.ms-excel"); 
header("Content-Disposition:filename=test.xls"); 
echo "test1	"; 
echo "test2	
"; 
echo "test1	"; 
echo "test2	
"; 
echo "test1	"; 
echo "test2	
"; 
echo "test1	"; 
echo "test2	
"; 
echo "test1	"; 
echo "test2	
"; 
echo "test1	"; 
echo "test2	
"; 
/*
,然后按照每一列数据结束后加	,每一行数据结束后加
的方法echo出来,
在php的开头用header("Content-type:application/vnd.ms-excel");
表示输出的是excel文件,用header("Content-Disposition:filename=test.xls");
表示输出的文件名为text.xls。这样就ok了。 
*/
?> 


直接读取将其显示在网页中只需要把前面的两个header变为

header("Content-type:application/vnd.ms-excel");
header( "Content-Disposition:attachment;filename=名称.xls");

thinkphp对excel操作一般是将文件上传到服务器上在进行将数据读入到数据库,再次将不符合要求的数据写入excel供用户下载

excel_reader2.php 和PHPExcel 类 放在thinkphp 框架中,具体位置如图,红线就是两个文件

后台处理代码:

 //将模板导入数据库并将不合格数据生成excel提供下载
    public function excel(){
    	import("ORG.Net.UploadFile");
    	Vendor('excel_reader2');
    	Vendor('PHPExcel.PHPExcel');
    	$upload = new UploadFile();// 实例化上传类
    	$upload->savePath = $data['url']= './Public/upload/model/';
		$upload->allowExts  = array('xls');// 设置附件上传类型
		$upload->saveRule ="abc".time();
		if(!$upload->upload()) {// 上传错误提示错误信息
		  $this->error($upload->getErrorMsg());
		}else{// 上传成功 获取上传文件信息
		  $info =  $upload->getUploadFileInfo();
		}
		
		//进行excel的读取
       $filename="./Public/upload/model/".$info[0]["savename"];
       $data = new Spreadsheet_Excel_Reader($filename);  
       $model=M("user_info");
       //读取数据库检查上传上的账号是否已存在
       $j=0;
       for($i=2;$i<=$data->sheets[0]['numRows'];$i++){
       	$user_id=$data->sheets[0]['cells'][$i][1];//获取excel中的id
       	$count=$model->where("idcard='$user_id'")->count();
       	if($count){  //账号已经存在则将数据存放进数组,将其读入excel供下载
       		 $arr[$j]['idcard']=$user_id;
       		 $arr[$j]['user_name']=$data->sheets[0]['cells'][$i][2];
       		 $arr[$j]['sex']=$data->sheets[0]['cells'][$i][3];
       		 $j++;
       }else{//将数据存入数据库
        $DATA['user_name']  =$data->sheets[0]['cells'][$i][2]; //获取用户名
        $DATA['sex'] =$data->sheets[0]['cells'][$i][3];   //获取性别
        $DATA['idcard'] = $user_id;
        $DATA['pwd']=md5("123456");
        $DATA['tellphone']="";
        $DATA[birthday]='1970-01-01';
        $DATA['creat_user']=$_SESSION['user_name'];
        $DATA['user_state']='1';
        $DATA['is_del']='0';
        $DATA['user_type']='1';
        $DATA['creat_time']=time();
       	$model->add($DATA);
       }
     }
     
      //进行excel的写入
     $objPHPExcel = new PHPExcel();
        foreach($arr as $k => $v){
             $num=$k+1;
             $objPHPExcel->setActiveSheetIndex(0)
                         //Excel的第A列,uid是你查出数组的键值,下面以此类推
                          ->setCellValue('A'.$num, $v['idcard'])    
                          ->setCellValue('B'.$num, $v['user_name'])
                          ->setCellValue('C'.$num, $v['sex']);
            }
            $objPHPExcel->getActiveSheet()->setTitle('User');
            $objPHPExcel->setActiveSheetIndex(0);
             $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
            //$objWriter->save('php://output');
            $file=time().".xls";
            $saveload="./Public/upload/model/abcd".$file;
            echo $saveload;
             $objWriter->save($saveload);//下载到文件
      $num=$data->sheets[0]['numRows']-1;
      $num2=$data->sheets[0]['numRows']-1-count($arr);
      $string="<br /><span style='margin-left:45px;'>共有<font color='red'>".$num."</font>条数据<span><br />";
      $string .= "<span style='margin-left:45px;'>上传成功<font color='red'>".$num2."</font>条<span><br />";
      $string .= "<span style='margin-left:45px;'>失败<font color='red'>".count($arr)."</font>条<span><br />";
      $string .="<a href='excoursrcexcourPublicUploadmodelabcd".$file."'>下载失败数据</a>";
      echo $string;
             exit;
    }




原文地址:https://www.cnblogs.com/riskyer/p/3275798.html