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\t"; echo "test2\t\n"; echo "test1\t"; echo "test2\t\n"; echo "test1\t"; echo "test2\t\n"; echo "test1\t"; echo "test2\t\n"; echo "test1\t"; echo "test2\t\n"; echo "test1\t"; echo "test2\t\n"; /* ,然后按照每一列数据结束后加\t,每一行数据结束后加\n的方法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='\excour\src\excour\Public\Upload\model\abcd".$file."'>下载失败数据</a>"; echo $string; exit; }