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.inc和reader.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
这里只是简单的输出数据,可以存入二维数组,进行后续处理。