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  

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

posted on 2012-10-29 09:47  洞庭啸月  阅读(2186)  评论(0编辑  收藏  举报

导航