登录  /  注册
首页 > php教程 > php手册 > 正文

ThinkPHP+PHPExcel[导入][导出]实现方法

php中文网
发布: 2016-06-07 11:43:28
原创
3273人浏览过

以下是我自己的实现方法,可能存在很多不足,欢迎大家提出改进...
实现步骤:
一:去官网http://phpexcel.codeplex.com/下载最新PHPExcel放到Vendor下,注意位置:ThinkPHP\Extend\Vendor\PHPExcel\PHPExcel.php。
二:在CommonAction.class.php中添加以下两个函数:/**<br>      +----------------------------------------------------------<br>      * Export Excel | 2013.08.23<br>      * Author:HongPing <hongping626><br>      +----------------------------------------------------------<br>      * @param $expTitle     string File name<br>      +----------------------------------------------------------<br>      * @param $expCellName  array  Column name<br>      +----------------------------------------------------------<br>      * @param $expTableData array  Table data<br>      +----------------------------------------------------------<br>      */<br>     public function exportExcel($expTitle,$expCellName,$expTableData){<br>         $xlsTitle = iconv('utf-8', 'gb2312', $expTitle);//文件名称<br>         $fileName = $_SESSION['loginAccount'].date('_YmdHis');//or $xlsTitle 文件名称可根据自己情况设定<br>         $cellNum = count($expCellName);<br>         $dataNum = count($expTableData);<br>         vendor("PHPExcel.PHPExcel");<br>         $objPHPExcel = new PHPExcel();<br>         $cellName = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ');<br>         <br>         $objPHPExcel-&gt;getActiveSheet(0)-&gt;mergeCells('A1:'.$cellName[$cellNum-1].'1');//合并单元格<br>         $objPHPExcel-&gt;setActiveSheetIndex(0)-&gt;setCellValue('A1', $expTitle.'  Export time:'.date('Y-m-d H:i:s'));  <br>         for($i=0;$i             $objPHPExcel-&gt;setActiveSheetIndex(0)-&gt;setCellValue($cellName[$i].'2', $expCellName[$i][1]); <br>         } <br>           // Miscellaneous glyphs, UTF-8   <br>         for($i=0;$i           for($j=0;$j             $objPHPExcel-&gt;getActiveSheet(0)-&gt;setCellValue($cellName[$j].($i+3), $expTableData[$i][$expCellName[$j][0]]);<br>           }             <br>         }  <br>         <br>         header('pragma:public');<br>         header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'.$xlsTitle.'.xls"');<br>         header("Content-Disposition:attachment;filename=$fileName.xls");//attachment新窗口打印inline本窗口打印<br>         $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');  <br>         $objWriter-&gt;save('php://output'); <br>         exit;   <br>     }<br>      <br>     /**<br>      +----------------------------------------------------------<br>      * Import Excel | 2013.08.23<br>      * Author:HongPing <hongping626><br>      +----------------------------------------------------------<br>      * @param  $file   upload file $_FILES<br>      +----------------------------------------------------------<br>      * @return array   array("error","message")<br>      +----------------------------------------------------------     <br>      */   <br>     public function importExecl($file){ <br>         if(!file_exists($file)){ <br>             return array("error"=&gt;0,'message'=&gt;'file not found!');<br>         } <br>         Vendor("PHPExcel.PHPExcel.IOFactory"); <br>         $objReader = PHPExcel_IOFactory::createReader('Excel5'); <br>         try{<br>             $PHPReader = $objReader-&gt;load($file);<br>         }catch(Exception $e){}<br>         if(!isset($PHPReader)) return array("error"=&gt;0,'message'=&gt;'read error!');<br>         $allWorksheets = $PHPReader-&gt;getAllSheets();<br>         $i = 0;<br>         foreach($allWorksheets as $objWorksheet){<br>             $sheetname=$objWorksheet-&gt;getTitle();<br>             $allRow = $objWorksheet-&gt;getHighestRow();//how many rows<br>             $highestColumn = $objWorksheet-&gt;getHighestColumn();//how many columns<br>             $allColumn = PHPExcel_Cell::columnIndexFromString($highestColumn);<br>             $array[$i]["Title"] = $sheetname; <br>             $array[$i]["Cols"] = $allColumn; <br>             $array[$i]["Rows"] = $allRow; <br>             $arr = array();<br>             $isMergeCell = array();<br>             foreach ($objWorksheet-&gt;getMergeCells() as $cells) {//merge cells<br>                 foreach (PHPExcel_Cell::extractAllCellReferencesInRange($cells) as $cellReference) {<br>                     $isMergeCell[$cellReference] = true;<br>                 }<br>             }<br>             for($currentRow = 1 ;$currentRow                 $row = array(); <br>                 for($currentColumn=0;$currentColumn                     $cell =$objWorksheet-&gt;getCellByColumnAndRow($currentColumn, $currentRow);<br>                     $afCol = PHPExcel_Cell::stringFromColumnIndex($currentColumn+1);<br>                     $bfCol = PHPExcel_Cell::stringFromColumnIndex($currentColumn-1);<br>                     $col = PHPExcel_Cell::stringFromColumnIndex($currentColumn);<br>                     $address = $col.$currentRow;<br>                     $value = $objWorksheet-&gt;getCell($address)-&gt;getValue();<br>                     if(substr($value,0,1)=='='){<br>                         return array("error"=&gt;0,'message'=&gt;'can not use the formula!');<br>                         exit;<br>                     }<br>                     if($cell-&gt;getDataType()==PHPExcel_Cell_DataType::TYPE_NUMERIC){<br>                         $cellstyleformat=$cell-&gt;getParent()-&gt;getStyle( $cell-&gt;getCoordinate() )-&gt;getNumberFormat();<br>                         $formatcode=$cellstyleformat-&gt;getFormatCode();<br>                         if (preg_match('/^([$[A-Z]*-[0-9A-F]*])*[hmsdy]/i', $formatcode)) {<br>                             $value=gmdate("Y-m-d", PHPExcel_Shared_Date::ExcelToPHP($value));<br>                         }else{<br>                             $value=PHPExcel_Style_NumberFormat::toFormattedString($value,$formatcode);<br>                         }                <br>                     }<br>                     if($isMergeCell[$col.$currentRow]&amp;&amp;$isMergeCell[$afCol.$currentRow]&amp;&amp;!empty($value)){<br>                         $temp = $value;<br>                     }elseif($isMergeCell[$col.$currentRow]&amp;&amp;$isMergeCell[$col.($currentRow-1)]&amp;&amp;empty($value)){<br>                         $value=$arr[$currentRow-1][$currentColumn];<br>                     }elseif($isMergeCell[$col.$currentRow]&amp;&amp;$isMergeCell[$bfCol.$currentRow]&amp;&amp;empty($value)){<br>                         $value=$temp;<br>                     }<br>                     $row[$currentColumn] = $value; <br>                 } <br>                 $arr[$currentRow] = $row; <br>             } <br>             $array[$i]["Content"] = $arr; <br>             $i++;<br>         } <br>         spl_autoload_register(array('Think','autoload'));//must, resolve ThinkPHP and PHPExcel conflicts<br>         unset($objWorksheet); <br>         unset($PHPReader); <br>         unset($PHPExcel); <br>         unlink($file); <br>         return array("error"=&gt;1,"data"=&gt;$array); <br>     }</hongping626></hongping626>使用方法
导入:function impUser(){<br>      if(isset($_FILES["import"]) &amp;&amp; ($_FILES["import"]["error"] == 0)){<br>         $result = $this-&gt;importExecl($_FILES["import"]["tmp_name"]);<br>         if($result["error"] == 1){          <br>           $execl_data = $result["data"][0]["Content"];<br>                   foreach($execl_data as $k=&gt;$v){<br>                       ..这里写你的业务代码..<br>                   }<br>          }<br>       }<br> }导出:function expUser(){//导出Excel<br>         $xlsName  = "User";<br>         $xlsCell  = array(<br>             array('id','账号序列'),<br>             array('account','登录账户'),<br>             array('nickname','账户昵称')<br>         );<br>         $xlsModel = M('Post');<br>         $xlsData  = $xlsModel-&gt;Field('id,account,nickname')-&gt;select();<br>         $this-&gt;exportExcel($xlsName,$xlsCell,$xlsData);<br>     }

AD:真正免费,域名+虚机+企业邮箱=0元

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
关于CSS思维导图的课件在哪? 课件
凡人来自于2024-04-16 10:10:18
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号