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中的超全局变量
Oct 09 PHP
可以在线执行PHP代码包装修正版
Mar 15 PHP
常用的php ADODB使用方法集锦
Mar 25 PHP
php方法调用模式与函数调用模式简例
Sep 20 PHP
PHP新手NOTICE错误常见解决方法
Dec 07 PHP
将php数组输出html表格的方法
Feb 24 PHP
Yii中使用PHPExcel导出Excel的方法
Dec 26 PHP
PHP-FPM实现性能优化
Mar 31 PHP
PHP常见加密函数用法示例【crypt与md5】
Jan 27 PHP
Yii框架中使用PHPExcel的方法分析
Jul 25 PHP
PHP实现微信提现(企业付款到零钱)
Aug 01 PHP
laravel 使用auth编写登录的方法
Sep 30 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
dedecms 制作模板中使用的全局标记图文教程
2007/03/11 PHP
PHP 金额数字转换成英文
2010/05/06 PHP
PHP+Mysql实现多关键字与多字段生成SQL语句的函数
2014/11/05 PHP
学习php设计模式 php实现桥梁模式(bridge)
2015/12/07 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
ThinkPHP5框架缓存查询操作分析
2018/05/30 PHP
浅谈PHP中的Trait使用方法
2019/03/22 PHP
javascript错误的认识不用关心内存管理
2012/12/15 Javascript
xmlhttp缓存清除的2种解决方法
2013/12/13 Javascript
jQuery简单实现网页选项卡特效
2014/11/24 Javascript
DOM基础教程之使用DOM + Css
2015/01/20 Javascript
javascript轻量级库createjs使用Easel实现拖拽效果
2016/02/19 Javascript
基于Vue.js的表格分页组件
2016/05/22 Javascript
使用JQuery 加载页面时调用JS的实现方法
2016/05/30 Javascript
浅谈js中调用函数时加不加括号的问题
2016/07/28 Javascript
微信小程序block的使用教程
2018/04/01 Javascript
使用Node搭建reactSSR服务端渲染架构
2018/08/30 Javascript
js限制input只能输入有效的数字(第一个不能是小数点)
2018/09/28 Javascript
vue基础之使用get、post、jsonp实现交互功能示例
2019/03/12 Javascript
js中script的上下放置区别,Dom的增删改创建操作实例分析
2019/12/16 Javascript
python 基础教程之Map使用方法
2017/01/17 Python
利用Pycharm断点调试Python程序的方法
2018/11/29 Python
opencv python统计及绘制直方图的方法
2019/01/21 Python
Python爬取新型冠状病毒“谣言”新闻进行数据分析
2020/02/16 Python
如何使用Django Admin管理后台导入CSV
2020/11/06 Python
使用纯 CSS 创作一个脉动 loader效果的源码
2018/09/28 HTML / CSS
全球速卖通:AliExpress(国际版淘宝)
2017/09/20 全球购物
澳大利亚领先的内衣店:Bendon Lingerie澳大利亚
2020/05/15 全球购物
党的群众路线教育实践活动对照检查材料
2014/09/22 职场文书
办公室班子四风问题对照检查材料
2014/10/04 职场文书
绿色环保倡议书
2015/04/28 职场文书
2015年学校团委工作总结
2015/05/26 职场文书
​(迎国庆)作文之我爱我的祖国
2019/09/19 职场文书
一篇文章带你搞懂Python类的相关知识
2021/05/20 Python
python如何正确使用yield
2021/05/21 Python
SQL试题 使用窗口函数选出连续3天登录的用户
2022/04/24 Oracle