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;
        }




  • 相关阅读:
    CODING x 百果园 _ 水果零售龙头迈出 DevOps 体系建设第一步
    Nocalhost 亮相 CD Foundation 国内首届 Meetup,Keith Chan 将出席致辞
    做云原生时代标准化工具,实现高效云上研发工作流
    打造数字化软件工厂 —— 一站式 DevOps 平台全景解读
    WePack —— 助力企业渐进式 DevOps 转型
    CODING Compass —— 打造行云流水般的软件工厂
    Nocalhost —— 让云原生开发回归原始而又简单
    CODING 代码资产安全系列之 —— 构建全链路安全能力,守护代码资产安全
    Nocalhost:云原生开发新体验
    使用 Nocalhost 开发 Kubernetes 中的 APISIX Ingress Controller
  • 原文地址:https://www.cnblogs.com/riskyer/p/3275798.html
Copyright © 2011-2022 走看看