zoukankan      html  css  js  c++  java
  • 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;
        }




  • 相关阅读:
    DOM和XMLHttpRequest对象的属性和方法
    【代码版】今天,你的密码泄露了吗?
    使用Smarty的相关注意事项及访问变量的几种方式
    HttpWatch工具简介及使用技巧
    Smarty中的请求变量和保留变量的使用范例
    Linux管道操作
    发布mvc3报错:403.14Forbidden Web 服务器被配置为不列出此目录的内容
    仿Linux中的cp操作
    Fedora的ifconfig命令
    @ Register和@ Reference的区别
  • 原文地址:https://www.cnblogs.com/riskyer/p/3275798.html
Copyright © 2011-2022 走看看