转自:http://www.thinkphp.cn/code/403.html
实现步骤:
注意:phpexcel必须是1.78版本的,不能用1.8以上的
一:去官网http://phpexcel.codeplex.com/下载最新PHPExcel放到Vendor下,注意位置:ThinkPHP\Extend\Vendor\PHPExcel\PHPExcel.php。
二:在CommonAction.class.php中添加以下两个函数:
  1. /**
  2. +----------------------------------------------------------
  3. * Export Excel | 2013.08.23
  4. * Author:HongPing <hongping626@qq.com>
  5. +----------------------------------------------------------
  6. * @param $expTitle     string File name
  7. +----------------------------------------------------------
  8. * @param $expCellName  array  Column name
  9. +----------------------------------------------------------
  10. * @param $expTableData array  Table data
  11. +----------------------------------------------------------
  12. */
  13. public function exportExcel($expTitle,$expCellName,$expTableData){
  14. $xlsTitle = iconv('utf-8', 'gb2312', $expTitle);//文件名称
  15. $fileName = $_SESSION['loginAccount'].date('_YmdHis');//or $xlsTitle 文件名称可根据自己情况设定
  16. $cellNum = count($expCellName);
  17. $dataNum = count($expTableData);
  18. vendor("PHPExcel.PHPExcel");
  19. $objPHPExcel = new PHPExcel();
  20. $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');
  21. $objPHPExcel->getActiveSheet(0)->mergeCells('A1:'.$cellName[$cellNum-1].'1');//合并单元格
  22. $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', $expTitle.'  Export time:'.date('Y-m-d H:i:s'));
  23. for($i=0;$i<$cellNum;$i++){
  24. $objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i].'2', $expCellName[$i][1]);
  25. }
  26. // Miscellaneous glyphs, UTF-8
  27. for($i=0;$i<$dataNum;$i++){
  28. for($j=0;$j<$cellNum;$j++){
  29. $objPHPExcel->getActiveSheet(0)->setCellValue($cellName[$j].($i+3), $expTableData[$i][$expCellName[$j][0]]);
  30. }
  31. }
  32. header('pragma:public');
  33. header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'.$xlsTitle.'.xls"');
  34. header("Content-Disposition:attachment;filename=$fileName.xls");//attachment新窗口打印inline本窗口打印
  35. $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
  36. $objWriter->save('php://output');
  37. exit;
  38. }
  39. /**
  40. +----------------------------------------------------------
  41. * Import Excel | 2013.08.23
  42. * Author:HongPing <hongping626@qq.com>
  43. +----------------------------------------------------------
  44. * @param  $file   upload file $_FILES
  45. +----------------------------------------------------------
  46. * @return array   array("error","message")
  47. +----------------------------------------------------------
  48. */
  49. public function importExecl($file){
  50. if(!file_exists($file)){
  51. return array("error"=>0,'message'=>'file not found!');
  52. }
  53. Vendor("PHPExcel.PHPExcel.IOFactory");
  54. $objReader = PHPExcel_IOFactory::createReader('Excel5');
  55. try{
  56. $PHPReader = $objReader->load($file);
  57. }catch(Exception $e){}
  58. if(!isset($PHPReader)) return array("error"=>0,'message'=>'read error!');
  59. $allWorksheets = $PHPReader->getAllSheets();
  60. $i = 0;
  61. foreach($allWorksheets as $objWorksheet){
  62. $sheetname=$objWorksheet->getTitle();
  63. $allRow = $objWorksheet->getHighestRow();//how many rows
  64. $highestColumn = $objWorksheet->getHighestColumn();//how many columns
  65. $allColumn = PHPExcel_Cell::columnIndexFromString($highestColumn);
  66. $array[$i]["Title"] = $sheetname;
  67. $array[$i]["Cols"] = $allColumn;
  68. $array[$i]["Rows"] = $allRow;
  69. $arr = array();
  70. $isMergeCell = array();
  71. foreach ($objWorksheet->getMergeCells() as $cells) {//merge cells
  72. foreach (PHPExcel_Cell::extractAllCellReferencesInRange($cells) as $cellReference) {
  73. $isMergeCell[$cellReference] = true;
  74. }
  75. }
  76. for($currentRow = 1 ;$currentRow<=$allRow;$currentRow++){
  77. $row = array();
  78. for($currentColumn=0;$currentColumn<$allColumn;$currentColumn++){;
  79. $cell =$objWorksheet->getCellByColumnAndRow($currentColumn, $currentRow);
  80. $afCol = PHPExcel_Cell::stringFromColumnIndex($currentColumn+1);
  81. $bfCol = PHPExcel_Cell::stringFromColumnIndex($currentColumn-1);
  82. $col = PHPExcel_Cell::stringFromColumnIndex($currentColumn);
  83. $address = $col.$currentRow;
  84. $value = $objWorksheet->getCell($address)->getValue();
  85. if(substr($value,0,1)=='='){
  86. return array("error"=>0,'message'=>'can not use the formula!');
  87. exit;
  88. }
  89. if($cell->getDataType()==PHPExcel_Cell_DataType::TYPE_NUMERIC){
  90. $cellstyleformat=$cell->getParent()->getStyle( $cell->getCoordinate() )->getNumberFormat();
  91. $formatcode=$cellstyleformat->getFormatCode();
  92. if (preg_match('/^([$[A-Z]*-[0-9A-F]*])*[hmsdy]/i', $formatcode)) {
  93. $value=gmdate("Y-m-d", PHPExcel_Shared_Date::ExcelToPHP($value));
  94. }else{
  95. $value=PHPExcel_Style_NumberFormat::toFormattedString($value,$formatcode);
  96. }
  97. }
  98. if($isMergeCell[$col.$currentRow]&&$isMergeCell[$afCol.$currentRow]&&!empty($value)){
  99. $temp = $value;
  100. }elseif($isMergeCell[$col.$currentRow]&&$isMergeCell[$col.($currentRow-1)]&&empty($value)){
  101. $value=$arr[$currentRow-1][$currentColumn];
  102. }elseif($isMergeCell[$col.$currentRow]&&$isMergeCell[$bfCol.$currentRow]&&empty($value)){
  103. $value=$temp;
  104. }
  105. $row[$currentColumn] = $value;
  106. }
  107. $arr[$currentRow] = $row;
  108. }
  109. $array[$i]["Content"] = $arr;
  110. $i++;
  111. }
  112. spl_autoload_register(array('Think','autoload'));//must, resolve ThinkPHP and PHPExcel conflicts
  113. unset($objWorksheet);
  114. unset($PHPReader);
  115. unset($PHPExcel);
  116. unlink($file);
  117. return array("error"=>1,"data"=>$array);
  118. }
复制代码

使用方法
导入:

  1. function impUser(){
  2. if(isset($_FILES["import"]) && ($_FILES["import"]["error"] == 0)){
  3. $result = $this->importExecl($_FILES["import"]["tmp_name"]);
  4. if($result["error"] == 1){
  5. $execl_data = $result["data"][0]["Content"];
  6. foreach($execl_data as $k=>$v){
  7. ..这里写你的业务代码..
  8. }
  9. }
  10. }
  11. }
复制代码

导出:

  1. function expUser(){//导出Excel
  2. $xlsName  = "User";
  3. $xlsCell  = array(
  4. array('id','账号序列'),
  5. array('account','登录账户'),
  6. array('nickname','账户昵称')
  7. );
  8. $xlsModel = M('Post');
  9. $xlsData  = $xlsModel->Field('id,account,nickname')->select();
  10. $this->exportExcel($xlsName,$xlsCell,$xlsData);
  11. }
复制代码
 

phpexcel使用说明5----ThinkPHP+PHPExcel[导入][导出]实现方法的更多相关文章

  1. 使用phpExcel实现Excel数据的导入导出(完全步骤)

    使用phpExcel实现Excel数据的导入导出(完全步骤)   很多文章都有提到关于使用phpExcel实现Excel数据的导入导出,大部分文章都差不多,或者就是转载的,都会出现一些问题,下面是本人 ...

  2. 利用PHPExcel 实现excel数据的导入导出(源码实现)

    利用PHPExcel 实现excel数据的导入导出(源码实现) 在开发过程中,经常会遇到导入导出的需求,利用phpexcel类实现起来也是比较容易的,下面,我们一步一步实现 提前将phpexcel类下 ...

  3. PLSQL导入/导出数据方法

    PLSQL导入/导出数据方法 PLSQL导入/导出数据方法 以前导数据库信息的时候,总是会先开启sql窗口,把自己手写的建表文件复制进去,然后再导入数据信息. 今天突然懒得去找以前的建表文件,而想用S ...

  4. 黄聪:超实用的PHPExcel[导入][导出]实现方法总结

    首先需要去官网https://github.com/PHPOffice/PHPExcel/下载PHPExcel,下载后只需要Classes目录下的文件即可. 1.PHPExcel导出方法实现过程 /* ...

  5. PHP导入导出Excel方法

    看到这篇文章的时候,很是惊讶原作者的耐心,虽然我们在平时用的也 有一些,但没有作者列出来的全,写excel的时候,我用过pear的库,也用过pack压包的头,同样那些利用smarty等作的简单替换xm ...

  6. PHP导入导出Excel方法小结

    基本上导出的文件分为两种: 1:类Excel格式,这个其实不是传统意义上的Excel文件,只是因为Excel的兼容能力强,能够正确打开而已.修改这种文件后再保存,通常会提示你是否要转换成Excel文件 ...

  7. .NET导入导出Excel方法总结

    最近,应项目的需求,需要实现Excel的导入导出功能,对于Web架构的Excel导入导出功能,比较传统的实现方式是: 1)导入Excel:将Excel文件上传到服务器的某一文件夹下,然后在服务端完成E ...

  8. plsql developer导入导出数据库方法

    导出步骤: 1 tools ->export user object 选择选项,导出.sql文件 2 tools ->export tables-> Oracle Export 选择 ...

  9. 加速 MySQL 导入导出的方法

    http://www.21andy.com/new/20100917/1952.html MySQL导出的SQL语句在导入时有可能会非常非常慢,在处理百万级数据的时候,可能导入要花几小时.在导出时合理 ...

随机推荐

  1. HDFS 数据错误与恢复

  2. numpy.flatnonzero():

    numpy.flatnonzero(): 该函数输入一个矩阵,返回扁平化后矩阵中非零元素的位置(index) 这是官方文档给出的用法,非常正规,输入一个矩阵,返回了其中非零元素的位置. 1 >& ...

  3. DevCloud会员权益升级!日常领码豆,轻松换好礼!

    为了回馈每一位用户的使用和支持, 华为云DevCloud上线了会员中心, 大家在会员中心可以通过完成任务赚取码豆, 并在兑换商城兑换精美礼品. 如何通过任务获得码豆? 我们为大家准备了各种日常任务, ...

  4. bzoj 2935 [Poi1999]原始生物——欧拉回路思路!

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2935 有向图用最小的路径(==总点数最少)覆盖所有边. 完了完了我居然连1999年的题都做不 ...

  5. iframe调用父页面各种方法

    HTML: <body>    <form id="form1" runat="server">       <div> & ...

  6. 【JZOJ5338】【NOIP2017提高A组模拟8.25】影子 点分治?/ 排序

    题面 65 看到路径问题,就想到了套路:点分治. 对于一个分治中心,先把在其子树的结点的sum和mn求出来,分别表示该节点到分治中心的边权和和点权最小值. 然后把mn离散化,并插入权值线段树中,以su ...

  7. 在Mac下安装MySQL

    在Mac下安装MySQL   最近开始将开发工具都转移到 Mac 上了,其中也会莫名其妙的遇到一些坑,不如干脆将整个流程都记录下来,方便以后查找. 下载与安装 首先进入 MySQL 官网,选择免费的C ...

  8. CentOS 6.8 Java 环境搭建

      1.搜索 Java 1.7 64 2.下载 文件 3.Xshell 安装lrzsz 4.选择路径 5.使用 rz 命令选择上传 6.打开 /etc/profile vim /etc/profile ...

  9. js实现放大镜特效的实现方法

    <!doctype html><html lang="en"><head> <meta charset="UTF-8" ...

  10. 手机号测吉凶python代码

    根据数理数来测电话后四位吉凶: 数理数 解释批注 0点特殊.......大吉 1大展鸿图.可获成功吉 2一盛一衰.劳而无功凶 3蒸蒸日上.百事顺遂吉 4坎坷前途.苦难折磨凶 5生意欣荣.名利双收吉 6 ...