zoukankan      html  css  js  c++  java
  • PHP中excel的导入

    1.1 Excel导入:

    Excel导入过程包含文件上传、excel文件的解析两个方面,文件上传和图片上传差不多,前台通过<input type="file" name="file" id="file" />将文件上传,后台通过$_FILES["file"],取到上传的文件,服务器会有一个缓存文件的地方,把他拷贝到另外的地方,用函数move_uploaded_file($_FILES["file"]["tmp_name"]。再说说excel文件的解析。Php中常用的解析excel的库有两个,一个是PHPExcel,另一个是PHPExcelReader。PHPExcel是一个很强大的excel工具库,对office 2003以及office 2007等excel格式的文件无论是导入还是导出都能够很好的支持。PHPExcelReader则简单方便,但是功能要少些。根据项目需求选择适当的库。

    1.1.1 PHPExcelReader方式

    PHPExcelReader只包含两个文件:oleread.increader.php。在系统中include这两个文件即可。考虑到系统中可能会频繁读取excel,因此统一对excel文件进行二维数组的映射,这样能够更方便的应用。解析为数组以后,就可以方便的存入数据库或者做其他的事情。

     1 require_once 'Excel/reader.php';  
     2 function readExcel($file){    
     3        $data = new Spreadsheet_Excel_Reader();//创建Spreadsheet_Excel_Reader类的对象,用于读取excel    
     4         $data->setOutputEncoding('UTF-8');//设置解析后的数据的字符编码    
     5         $data->read($file);//$file为excel文件名    
     6         error_reporting(E_ALL ^ E_NOTICE);//输出E_ALL ^ E_NOTICE级别的信息(报错)    
     7         //使用$data->sheets读取excel的数据    
     8         $excelArr=array();    
     9         for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++){    
    10             $index=$data->sheets[0]['cells'][1][$j];    
    11             $excelArr[$index]=array();    
    12             for ($i = 2; $i <= $data->sheets[0]['numRows']; $i++){    
    13                 $excelArr[$index][]=$data->sheets[0]['cells'][$i][$j];       
    14             }    
    15         }    
    16         return $excelArr;  
    17     }  
    18     $share = readExcel("jxlrwtest.xls");  
    19 print_r($share);  

    对于这样的表单

    看到输出的数组

    Array ( [id] => Array ( [0] => 12 [1] => 2 [2] => [3] => ) [name] => Array ( [0] => sharexi [1] => zhangfe [2] => 王老五 [3] => ) [school] => Array ( [0] => hust [1] => 华中科技大学 [2] => [3] => 的快捷方式快乐 ) [home] => Array ( [0] => tencent [1] => 腾讯 [2] => 看到房价快速 [3] => 213 ) ) 

    1.1.2 PHPExcel 方式

    PHPExcel最新版下载:
    http://phpexcel.codeplex.com/ 

    通过引入PHPExcel库的方式,首先建立phpexcel文档对象,$PHPExcel = new PHPExcel(); 然后建立文档读取对象,$reader = PHPExcel_IOFactory::createReader('Excel5'); //设置以Excel5格式(Excel97-2003工作簿)或者$reader = PHPExcel_IOFactory::createReader('Excel2007'); //设置以Excel2007格式(Excel2007以上工作簿),然后调用读取接口对文档内容进行循环读取,可建立二维数组存储数据

     1 <?php  
     2 set_include_path(get_include_path() . PATH_SEPARATOR . '../Classes/');  
     3 include 'PHPExcel.php';   
     4 include 'PHPExcel/IOFactory.php';  
     5 /**对excel里的日期进行格式转化*/   
     6 function GetData($val){   
     7 $jd = GregorianToJD(1, 1, 1970);   
     8 $gregorian = JDToGregorian($jd+intval($val)-25569);   
     9 return $gregorian;/**显示格式为 “月/日/年” */   
    10 }   
    11 $filePath = 'Book1.xls';   
    12 $PHPExcel = new PHPExcel();   
    13 $reader = PHPExcel_IOFactory::createReader('Excel5'); //设置以Excel5格式(Excel97-2003工作簿)  
    14 //$PHPExcel = $PHPReader->load($filePath);   
    15 $PHPExcel = $reader->load($filePath);   
    16 /**读取excel文件中的第一个工作表*/   
    17 $currentSheet = $PHPExcel->getSheet(0);   
    18 /**取得最大的列号*/   
    19 $allColumn = $currentSheet->getHighestColumn();   
    20 /**取得一共有多少行*/   
    21 $allRow = $currentSheet->getHighestRow();   
    22 /**从第一行开始输出,因为excel表中第一行为列名*/   
    23 for($currentRow = 1;$currentRow <= $allRow;$currentRow++){   
    24 /**从第A列开始输出*/     
    25 for($currentColumn= 'A';$currentColumn<= $allColumn; $currentColumn++){   
    26 $val = $currentSheet->getCellByColumnAndRow(ord($currentColumn) - 65,$currentRow)->getValue();/**ord()将字符转为十进制数*/   
    27 if($currentColumn == 'A')   
    28 {   
    29 echo GetData($val)."\t";   
    30 }else{   
    31 //echo $val;   
    32 /**如果输出汉字有乱码,则需将输出内容用iconv函数进行编码转换,如下将gb2312编码转为utf-8编码输出*/   
    33 echo iconv('utf-8','gb2312', $val)."\t";   
    34 }   
    35 }   
    36 echo "</br>";   
    37 }   
    38 echo "\n";   
    39 ?>  

    上面的表格内容输出如下:

    12/30/1899 name school home 
    1/11/1900 sharexie hust tencent 
    1/1/1900 zhangfei 华中科技大学 腾讯 
    12/30/1899 王老五 看到房价快速的 
    12/30/1899 的快捷方式快乐 213  

    这里只是简单的输出数据,可以存入二维数组,进行后续处理。

  • 相关阅读:
    Mongo简单查询总结
    将对象转换成Dictionary 字典
    C#调用NPOI组件导出Excel表格
    Lambda中的一些方法的总结
    LinQ总结
    简单的爬虫 一
    Python 中的注释规范
    在VM上配置一个能上网的网络设置
    Python 中新式类的内置方法
    Python 中的locals()
  • 原文地址:https://www.cnblogs.com/fredshare/p/2744247.html
Copyright © 2011-2022 走看看