ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例


Posted in PHP onJuly 22, 2014

本文所述实例是使用在Thinkphp的开发框架上,要是使用在其他框架也是同样的方法,很多人可能不能正确的实现Excel的导入导出,问题基本上都是phpExcel的核心类引用路径出错造成的,如果有问题大家务必要对路劲是否引用正确进行测试。

具体操作步骤如下:

(一)导入Excel

第一,在前台html页面进行上传文件:如:

<form method="post" action="php文件" enctype="multipart/form-data">
 <h3>导入Excel表:</h3><input type="file" name="file_stu" />

 <input type="submit" value="导入" />
</form>

第二,在对应的php文件进行文件的处理

if (! empty ( $_FILES ['file_stu'] ['name'] )) 
 {
 $tmp_file = $_FILES ['file_stu'] ['tmp_name'];
 $file_types = explode ( ".", $_FILES ['file_stu'] ['name'] );
 $file_type = $file_types [count ( $file_types ) - 1];
  /*判别是不是.xls文件,判别是不是excel文件*/
  if (strtolower ( $file_type ) != "xls")    
 {
   $this->error ( '不是Excel文件,重新上传' );
  }
 /*设置上传路径*/
  $savePath = SITE_PATH . '/public/upfile/Excel/';
 /*以时间来命名上传的文件*/
  $str = date ( 'Ymdhis' ); 
  $file_name = $str . "." . $file_type;
  /*是否上传成功*/
  if (! copy ( $tmp_file, $savePath . $file_name )) 
  {
   $this->error ( '上传失败' );
  }
 /*
  *对上传的Excel数据进行处理生成编程数据,这个函数会在下面第三步的ExcelToArray类中

  注意:这里调用执行了第三步类里面的read函数,把Excel转化为数组并返回给$res,再进行数据库写入
 */
 $res = Service ( 'ExcelToArray' )->read ( $savePath . $file_name );
 /*
  重要代码 解决Thinkphp M、D方法不能调用的问题 
  如果在thinkphp中遇到M 、D方法失效时就加入下面一句代码
 */
 //spl_autoload_register ( array ('Think', 'autoload' ) );
 /*对生成的数组进行数据库的写入*/
 foreach ( $res as $k => $v ) 
 {
  if ($k != 0) 
  {
   $data ['uid'] = $v [0];
   $data ['password'] = sha1 ( '111111' );
   $data ['email'] = $v [1];
   $data ['uname'] = $v [3];
   $data ['institute'] = $v [4];
   $result = M ( 'user' )->add ( $data );
   if (! $result) 
   {
    $this->error ( '导入数据库失败' );
   }
  }
 }
}

第三:ExcelToArrary类,用来引用phpExcel并处理Excel数据的
此处注意:ExcelToArrary类建在根目录下的 addons /services/ExcelToArrary.class.php中

class ExcelToArrary extends Service{
 public function __construct() {
  /*导入phpExcel核心类 注意 :你的路径跟我不一样就不能直接复制*/
  include_once('./Excel/PHPExcel.php');
 }
/**
* 读取excel $filename 路径文件名 $encode 返回数据的编码 默认为utf8
*以下基本都不要修改
*/ 
public function read($filename,$encode='utf-8'){
   $objReader = PHPExcel_IOFactory::createReader('Excel5'); 
   $objReader->setReadDataOnly(true); 
   $objPHPExcel = $objReader->load($filename); 
   $objWorksheet = $objPHPExcel->getActiveSheet(); 
  $highestRow = $objWorksheet->getHighestRow(); 
  $highestColumn = $objWorksheet->getHighestColumn(); 
 $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); 
  $excelData = array(); 
  for ($row = 1; $row <= $highestRow; $row++) { 
  for ($col = 0; $col < $highestColumnIndex; $col++) { 
     $excelData[$row][] =(string)$objWorksheet->getCellByColumnAndRow($col, $row)->getValue();
   } 
   } 
  return $excelData; 
 }  
 }

第四,以上就是导入的全部内容,phpExcel包附在最后。

(二)Excel的导出(相对于导入简单多了)

第一,先查出数据库里面要生成Excel的数据,如:

$data= M('User')->findAll(); //查出数据
$name='Excelfile'; //生成的Excel文件文件名
$res=service('ExcelToArrary')->push($data,$name);

第二,ExcelToArrary类,用来引用phpExcel并处理数据的   

class ExcelToArrary extends Service{
public function __construct() {
  /*导入phpExcel核心类 注意 :你的路径跟我不一样就不能直接复制*/
  include_once('./Excel/PHPExcel.php');
}
/* 导出excel函数*/
public function push($data,$name='Excel'){
 error_reporting(E_ALL);
 date_default_timezone_set('Europe/London');
 $objPHPExcel = new PHPExcel();

/*以下是一些设置 ,什么作者 标题啊之类的*/
 $objPHPExcel->getProperties()->setCreator("转弯的阳光")
   ->setLastModifiedBy("转弯的阳光")
   ->setTitle("数据EXCEL导出")
   ->setSubject("数据EXCEL导出")
   ->setDescription("备份数据")
   ->setKeywords("excel")
  ->setCategory("result file");
 /*以下就是对处理Excel里的数据, 横着取数据,主要是这一步,其他基本都不要改*/
foreach($data as $k => $v){
  $num=$k+1;
  $objPHPExcel->setActiveSheetIndex(0)
 //Excel的第A列,uid是你查出数组的键值,下面以此类推
 ->setCellValue('A'.$num, $v['uid']) 
 ->setCellValue('B'.$num, $v['email'])
 ->setCellValue('C'.$num, $v['password'])
 }
 $objPHPExcel->getActiveSheet()->setTitle('User');
 $objPHPExcel->setActiveSheetIndex(0);
  header('Content-Type: application/vnd.ms-excel');
  header('Content-Disposition: attachment;filename="'.$name.'.xls"');
  header('Cache-Control: max-age=0');
  $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
  $objWriter->save('php://output');
  exit;
}

第三,以上就是导出的全部内容,phpExcel本站下载地址https://3water.com/codes/194070.html

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP脚本的10个技巧(1)
Oct 09 PHP
php模拟post行为代码总结(POST方式不是绝对安全)
Feb 22 PHP
php从文件夹随机读取文件的方法
Jun 01 PHP
PHP中的表达式简述
May 29 PHP
PHP如何实现跨域
May 30 PHP
thinkphp实现分页显示功能
Dec 03 PHP
PHP实现的自定义图像居中裁剪函数示例【测试可用】
Aug 11 PHP
PHP chunk_split()函数讲解
Feb 12 PHP
掌握PHP垃圾回收机制详解
Mar 13 PHP
laravel框架上传图片实现实时预览功能
Oct 14 PHP
ThinkPHP5&amp;5.1实现验证码的生成、使用及点击刷新功能示例
Feb 07 PHP
Laravel6.18.19如何优雅的切换发件账户
Jun 14 PHP
ThinkPHP权限认证Auth实例详解
Jul 22 #PHP
ThinkPHP行为扩展Behavior应用实例详解
Jul 22 #PHP
qq登录,新浪微博登录接口申请过程中遇到的问题
Jul 22 #PHP
php.ini save_handler 修改不生效的解决办法
Jul 22 #PHP
PHP中模拟处理HTTP PUT请求的例子
Jul 22 #PHP
ThinkPHP之用户注册登录留言完整实例
Jul 22 #PHP
合并ThinkPHP配置文件以消除代码冗余的实现方法
Jul 22 #PHP
You might like
7个超级实用的PHP代码片段
2011/07/11 PHP
input file获得文件根目录简单实现
2013/04/26 PHP
php实现utf-8转unicode函数分享
2015/01/06 PHP
thinkPHP中验证码的简单使用方法
2015/12/26 PHP
Windows下php+mysql5.7配置教程
2017/05/16 PHP
国外的为初学者写的JavaScript教程
2008/06/09 Javascript
兼容FireFox 的 js 日历 支持时间的获取
2009/03/04 Javascript
JS操作图片(增,删,改) 例子
2013/04/17 Javascript
JS实现仿QQ面板的手风琴效果折叠菜单代码
2015/09/11 Javascript
JS中JSON对象和String之间的互转及处理技巧
2016/04/06 Javascript
简单封装js的dom查询实例代码
2016/07/08 Javascript
JS版微信6.0分享接口用法分析
2016/10/13 Javascript
深入理解Angular.JS中的Scope继承
2017/06/04 Javascript
vue.js模仿京东省市区三级联动的选择组件实例代码
2017/11/22 Javascript
JavaScript使用math.js进行精确计算操作示例
2018/06/19 Javascript
Angular5集成eventbus的示例代码
2018/07/19 Javascript
nodejs实现范围请求的实现代码
2018/10/12 NodeJs
react 应用多入口配置及实践总结
2018/10/17 Javascript
mpvue性能优化实战技巧(小结)
2019/04/17 Javascript
如何正确解决VuePress本地访问出现资源报错404的问题
2020/12/03 Vue.js
在Django中创建URLconf相关的通用视图的方法
2015/07/20 Python
Python列表删除的三种方法代码分享
2017/10/31 Python
[原创]Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】
2018/10/29 Python
Python实现制度转换(货币,温度,长度)
2019/07/14 Python
Python一键安装全部依赖包的方法
2019/08/12 Python
Python scrapy增量爬取实例及实现过程解析
2019/12/24 Python
入党自我评价范文
2014/02/02 职场文书
测绘专业大学生职业生涯规划书
2014/02/10 职场文书
销售员岗位职责
2014/06/09 职场文书
六五普法宣传标语
2014/10/06 职场文书
小学少先队辅导员述职报告
2015/01/10 职场文书
店长岗位职责
2015/02/11 职场文书
2016年第二十五次全国助残日活动总结
2016/04/01 职场文书
Nginx URL重写rewrite机制原理及使用实例
2021/04/01 Servers
Python实现仓库管理系统
2022/05/30 Python
win10如何开启ahci模式?win10开启ahci模式详细操作教程
2022/07/23 数码科技