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

php 和thinkphp 对excel操作的更多相关文章

  1. Npoi导入导出Excel操作

    之前公司的一个物流商系统需要实现对订单的批量导入和导出,翻阅了一些资料,最后考虑使用NPOI实现这个需求. 在winform上面实现excel操作:http://www.cnblogs.com/Cal ...

  2. Delphi Excel 操作大全

    Delphi Excel 操作大全 (一) 使用动态创建的方法首先创建 Excel 对象,使用ComObj:var ExcelApp: Variant;ExcelApp := CreateOleObj ...

  3. C#EXCEL 操作类--C#ExcelHelper操作类

    主要功能如下1.导出Excel文件,自动返回可下载的文件流 2.导出Excel文件,转换为可读模式3.导出Excel文件,并自定义文件名4.将数据导出至Excel文件5.将指定的集合数据导出至Exce ...

  4. Excel 操作类

    转载:http://www.cnblogs.com/fellowcheng/archive/2010/08/21/1805158.html ExcelHelper(Excel2007) Code hi ...

  5. C# excel操作

    开源的Excel操作项目: http://www.cnblogs.com/lwme/archive/2011/11/27/2265323.html 添加引用:Microsoft Excel 11.0 ...

  6. [Excel操作]Microsoft Office Excel 不能访问文件

    最近,客户服务器迁移,因操作系统环境变化而引起的的环境问题一堆,遇到的问题并解决方法在“[Excel]操作”类别会体现. Microsoft Office Excel 不能访问文件“C:\\LMSEx ...

  7. C#常用工具类——Excel操作类

    /// 常用工具类——Excel操作类 /// <para> ------------------------------------------------</para> / ...

  8. 报表中的Excel操作之Aspose.Cells(Excel模板)

    原文:报表中的Excel操作之Aspose.Cells(Excel模板) 本篇中将简单记录下Aspose.Cells这个强大的Excel操作组件.这个组件的强大之处,就不多说,对于我们的报表总是会有导 ...

  9. C# Excel操作类

    /// 常用工具类——Excel操作类 /// <para> ------------------------------------------------</para> / ...

随机推荐

  1. android4.4组件分析--service组件

    6       Service 6.1            service介绍 6.1.1.            基本介绍 Service是Android四大组件之中的一个(其余的是activit ...

  2. Hadoop HDFS (3) JAVA訪问HDFS之二 文件分布式读写策略

    先把上节未完毕的部分补全,再剖析一下HDFS读写文件的内部原理 列举文件 FileSystem(org.apache.hadoop.fs.FileSystem)的listStatus()方法能够列出一 ...

  3. cygrunsrv: Error starting a service: QueryServiceStatus: Win32 error 1062: 解决办法

    问题原因:很可能是/var/log的权限设置不正确.首先执行 mkpasswd 和 mkgroup 重新生成权限信息,再删除sshd服务,重新配置 解决办法: $ mkpasswd -l > / ...

  4. C++多态原理

    C++的多态性是通过动态绑定实现的 非虚函数是在编译时绑定的; 通过对象进行的函数(虚函数,非虚函数)也是编译时绑定的; C++编译器在编译的时候,要确定每个对象调用的函数(要求此函数是非虚函数)的地 ...

  5. CairoSVG - Convert SVG to PNG or PDF - Contents

    CairoSVG - Convert SVG to PNG or PDF - Contents User Documentation Author Guillaume Ayoub Date 2011- ...

  6. linux下编译.so 和.a 可能出现的问题 ?

    1. 静态函数库 这类库的名字一般是libxxx.a:利用静态函数库编译成的文件比较大,因为整个 函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持 ...

  7. linux登录windows服务器

    在公司同时也兼顾了王老师会议网站的任务,我喜欢用linux,而会议网站托管在windows系统上,虽然装了双系统,但我还是比较懒,不喜欢经常切换系统.还好,linux可以实现登录windows服务器. ...

  8. java BigDecimal的使用和四舍五入及格式规范(精准数据)

    • Java中的简单浮点数类型float和double不能够进行运算.不光是Java,在其它很多编程语言中也有这样的问题. 如果我们编译运行下面这个程序会看到什么? public   class  T ...

  9. HDU 3468 BFS+二分匹配

    九野的博客,转载请注明出处 http://blog.csdn.net/acmmmm/article/details/10966383 开始建图打搓了,参考了大牛的题解打的版本比较清爽,后来改的基本雷同 ...

  10. 关于innodb purge thread和master thread

    由innodb_purge_threads控制purge线程数. (>= 5.6.5)的版本号中该值默觉得1.最大值为32.默认值1表示innodb的purge操作被分离到purge线程中,ma ...