zoukankan      html  css  js  c++  java
  • phpexcel 导入 和 导出

    今天使用一个第三方的SDK(PHPExcel)实现Excel文件的导入和导出。

    准备工作:
    1.下载PHPExcel的SDK,下载地址:https://github.com/PHPOffice/PHPExcel

    2.将SDK解压之后的Class文件拷贝到自己的项目。

    一.Excel文件读取

    [php] view plain copy
     
    1. function excelToArray(){  
    2.     require_once dirname(__FILE__) . '/Lib/Classes/PHPExcel/IOFactory.php';  
    3.       
    4.     //加载excel文件  
    5.     $filename = dirname(__FILE__).'/result.xlsx';  
    6.     $objPHPExcelReader = PHPExcel_IOFactory::load($filename);    
    7.   
    8.     $sheet = $objPHPExcelReader->getSheet(0);        // 读取第一个工作表(编号从 0 开始)  
    9.     $highestRow = $sheet->getHighestRow();           // 取得总行数  
    10.     $highestColumn = $sheet->getHighestColumn();     // 取得总列数  
    11.   
    12.     $arr = 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');  
    13.     // 一次读取一列  
    14.     $res_arr = array();  
    15.     for ($row = 2; $row <= $highestRow; $row++) {  
    16.         $row_arr = array();  
    17.         for ($column = 0; $arr[$column] != 'F'; $column++) {  
    18.             $val = $sheet->getCellByColumnAndRow($column, $row)->getValue();  
    19.             $row_arr[] = $val;  
    20.         }  
    21.           
    22.         $res_arr[] = $row_arr;  
    23.     }  
    24.       
    25.     return $res_arr;  
    26. }  

    或者:

    [php] view plain copy
     
    1. function excelToArray(){  
    2.     require_once dirname(__FILE__) . '/Lib/Classes/PHPExcel/IOFactory.php';  
    3.       
    4.     //加载excel文件  
    5.     $filename = dirname(__FILE__).'/result.xlsx';  
    6.     $objPHPExcelReader = PHPExcel_IOFactory::load($filename);    
    7.   
    8.     $reader = $objPHPExcelReader->getWorksheetIterator();  
    9.     //循环读取sheet  
    10.     foreach($reader as $sheet) {  
    11.         //读取表内容  
    12.         $content = $sheet->getRowIterator();  
    13.         //逐行处理  
    14.         $res_arr = array();  
    15.         foreach($content as $key => $items) {  
    16.               
    17.              $rows = $items->getRowIndex();              //行  
    18.              $columns = $items->getCellIterator();       //列  
    19.              $row_arr = array();  
    20.              //确定从哪一行开始读取  
    21.              if($rows < 2){  
    22.                  continue;  
    23.              }  
    24.              //逐列读取  
    25.              foreach($columns as $head => $cell) {  
    26.                  //获取cell中数据  
    27.                  $data = $cell->getValue();  
    28.                  $row_arr[] = $data;  
    29.              }  
    30.              $res_arr[] = $row_arr;  
    31.         }  
    32.           
    33.     }  
    34.       
    35.     return $res_arr;  
    36. }  

    两种方法均可将表格数据转化为数组,然后哦再进行相关的操作就简单了。

    二.Excel文件导出

    [php] view plain copy
     
    1. /** 
    2.  * 创建(导出)Excel数据表格 
    3.  * @param  array   $list        要导出的数组格式的数据 
    4.  * @param  string  $filename    导出的Excel表格数据表的文件名 
    5.  * @param  array   $indexKey    $list数组中与Excel表格表头$header中每个项目对应的字段的名字(key值) 
    6.  * @param  array   $startRow    第一条数据在Excel表格中起始行 
    7.  * @param  [bool]  $excel2007   是否生成Excel2007(.xlsx)以上兼容的数据表 
    8.  * 比如: $indexKey与$list数组对应关系如下: 
    9.  *     $indexKey = array('id','username','sex','age'); 
    10.  *     $list = array(array('id'=>1,'username'=>'YQJ','sex'=>'男','age'=>24)); 
    11.  */  
    12. function exportExcel($list,$filename,$indexKey,$startRow=1,$excel2007=false){  
    13.     //文件引入  
    14.     require_once APP_ROOT.'/Api/excel/PHPExcel.php';  
    15.     require_once APP_ROOT.'/Api/excel/PHPExcel/Writer/Excel2007.php';  
    16.       
    17.     if(empty($filename)) $filename = time();  
    18.     if( !is_array($indexKey)) return false;  
    19.       
    20.     $header_arr = 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');  
    21.     //初始化PHPExcel()  
    22.     $objPHPExcel = new PHPExcel();  
    23.       
    24.     //设置保存版本格式  
    25.     if($excel2007){  
    26.         $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);  
    27.         $filename = $filename.'.xlsx';  
    28.     }else{  
    29.         $objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);  
    30.         $filename = $filename.'.xls';  
    31.     }  
    32.       
    33.     //接下来就是写数据到表格里面去  
    34.     $objActSheet = $objPHPExcel->getActiveSheet();  
    35.     //$startRow = 1;  
    36.     foreach ($list as $row) {  
    37.         foreach ($indexKey as $key => $value){  
    38.             //这里是设置单元格的内容  
    39.             $objActSheet->setCellValue($header_arr[$key].$startRow,$row[$value]);  
    40.         }  
    41.         $startRow++;  
    42.     }  
    43.       
    44.     // 下载这个表格,在浏览器输出  
    45.     header("Pragma: public");  
    46.     header("Expires: 0");  
    47.     header("Cache-Control:must-revalidate, post-check=0, pre-check=0");  
    48.     header("Content-Type:application/force-download");  
    49.     header("Content-Type:application/vnd.ms-execl");  
    50.     header("Content-Type:application/octet-stream");  
    51.     header("Content-Type:application/download");;  
    52.     header('Content-Disposition:attachment;filename='.$filename.'');  
    53.     header("Content-Transfer-Encoding:binary");  
    54.     $objWriter->save('php://output');  
    55. }  


    导出文件,还可以设置模板

    [php] view plain copy
     
      1. function exportExcel($list,$filename,$indexKey=array()){  
      2.     require_once dirname(__FILE__) . '/Lib/Classes/PHPExcel/IOFactory.php';  
      3.     require_once dirname(__FILE__) . '/Lib/Classes/PHPExcel.php';  
      4.     require_once dirname(__FILE__) . '/Lib/Classes/PHPExcel/Writer/Excel2007.php';  
      5.       
      6.     $header_arr = 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');  
      7.       
      8.     //$objPHPExcel = new PHPExcel();                        //初始化PHPExcel(),不使用模板  
      9.     $template = dirname(__FILE__).'/template.xls';          //使用模板  
      10.     $objPHPExcel = PHPExcel_IOFactory::load($template);     //加载excel文件,设置模板  
      11.       
      12.     $objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);  //设置保存版本格式  
      13.       
      14.     //接下来就是写数据到表格里面去  
      15.     $objActSheet = $objPHPExcel->getActiveSheet();  
      16.     $objActSheet->setCellValue('A2',  "活动名称:江南极客");  
      17.     $objActSheet->setCellValue('C2',  "导出时间:".date('Y-m-d H:i:s'));  
      18.     $i = 4;  
      19.     foreach ($list as $row) {  
      20.         foreach ($indexKey as $key => $value){  
      21.             //这里是设置单元格的内容  
      22.             $objActSheet->setCellValue($header_arr[$key].$i,$row[$value]);  
      23.         }  
      24.         $i++;  
      25.     }  
      26.       
      27.     // 1.保存至本地Excel表格  
      28.     //$objWriter->save($filename.'.xls');  
      29.       
      30.     // 2.接下来当然是下载这个表格了,在浏览器输出就好了  
      31.     header("Pragma: public");  
      32.     header("Expires: 0");  
      33.     header("Cache-Control:must-revalidate, post-check=0, pre-check=0");  
      34.     header("Content-Type:application/force-download");  
      35.     header("Content-Type:application/vnd.ms-execl");  
      36.     header("Content-Type:application/octet-stream");  
      37.     header("Content-Type:application/download");;  
      38.     header('Content-Disposition:attachment;filename="'.$filename.'.xls"');  
      39.     header("Content-Transfer-Encoding:binary");  
      40.     $objWriter->save('php://output');  
      41. }  
  • 相关阅读:
    React篇-子组件调用父组件方法,并传值
    RN-ios模拟器上调出中文输入法
    mac-破解2018 webstorm
    React篇-滚动条下移的触发在react的生命周期分析
    javascript篇-typeof,instanceof,constructor,toString判断数据类型的用法和区别
    javascript篇-slice(),splice(),split(),substring(),substr()的用法以及区别
    javascript篇-console.log()打印object却显示为字符串[object object]
    Linux的几种关机命令
    深入浅出Oracle:DBA入门、进阶与诊断案例 PDF 下载
    SQL state [72000]; error code [1461]; ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值 ; nested exception is java.sql.BatchUpdateException: ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值
  • 原文地址:https://www.cnblogs.com/photo520/p/8868089.html
Copyright © 2011-2022 走看看