关于PHPEXCEL读取excel表的使用及过程中需要解决的问题

如今遇到使用PHPEXCEL读取EXCEL的开发,虽然网上大家都供献了很多不错的源码,不过遇到自己开发时也得根据自己的情况来使用并解决一些问题。这里把我在此开发过程中使用的方法及遇到的问题发布出来,方法能在这一篇文章中解决更多的问题。

一、PHPEXCEL的使用

使用PHPEXCEL需要先下载PHPEXCEL文件包,本文配备了文件包方便大家下载测试,也可以根据需要网上找更新的版本。

function import_level1() {
	
		$filename=trim($_POST['file']);//读取excel文件
		$filePath="/home/ftp/c/chinajxedu_news/wwwroot/uploadfile/excel/".$filename;//指定文件路径
		require_once('/home/ftp/c/chinajxedu_news/wwwroot/phpcms/excel/PHPExcel/IOFactory.php');//引入excel文件库

		if($dosubmit){
			$PHPReader = new PHPExcel_Reader_Excel5();
					 if(!$PHPReader->canRead($filePath)){   
						 $PHPReader = new PHPExcel_Reader_Excel5();   
							   if(!$PHPReader->canRead($filePath)){         
									echo 'no Excel';  
									 return ;   
							   }  
					  }

			$PHPExcel = $PHPReader->load($filePath);  

			$currentSheet = $PHPExcel->getSheet(0);  /**取得一共有多少列*/

			$allColumn = $currentSheet->getHighestColumn();     /**取到多少列*/  

			$allRow = $currentSheet->getHighestRow();
			
			
			for( $currentRow = 2 ; $currentRow <= $allRow ; $currentRow++){

					  $flag = 0;
					  $col = array();
						for($currentColumn='A'; $this->getascii($currentColumn) <= $this->getascii($allColumn) ; $currentColumn++){
							$address = $currentColumn.$currentRow;   
							$string = $currentSheet->getCell($address)->getValue();
							$col[$flag] = $string;
							$flag++;
					  }
					 
					//插入数据
					if($col)
					{
						
						//这里可以取$col数组中的值构建要插入数据库的数组对象。
						
					}
				 //print_r($col);
			}

			}
	}

此方法使用的方式是对要导入的excel文件采用指定绝对地址的方法,大家可以根据情况增加上传文件到服务器的功能,总之需要指定准确的文件路径及名称。excel版本建议为97-2003(.xls),xlsx应该也可以,没测试,使用的朋友你可以试一下。

二、使用中遇到的几个问题 

1、在循环读取excel中getascii方法必须使用,否则只会读取第一列的数据,列无法循环下去。 

	public function getascii($ch) {  //读取字符串的ASCII码
		if(strlen($ch) == 1)
		return ord($ch)-65;
		return ord($ch[1])-38;

		}

2、如果excel表中有日期,而且需要以时间戳的形式存入到数据表中,则时间日期格式需进行如下处理。

     Excel中的日期存储的是数值类型,计算的是从1900年1月1日到现在的数值。例如2008-12-31实际上存储的是39813。可以在       Excel中验证,首先在一个单元格中输入2008-12-31,然后将单元格格式修改为“常规”,然后就会看到单元格内容变成了39813。
 
    Excel中的时间是一个从0到0.99999999之间的小数值,表示从00:00:00(12:00:00 AM)到23:59:59(11:59:59 PM)之间的时间。例如12:00 PM的数值是0.5,表示一天的一半。
 
    Excel 2007版本中提供了24种默认的日期类型格式,其中带星号的两个会和系统时区绑定(这样在不同时区的电脑之间传递文件时,时间会发生变化)其他的则不会根据时区发生变化。

    这些信息只做为一个简单了解,如想了解更多的可以到网上去查,这里不再多说,以解决实问题为主。

$d = trim($col[9]);$t = 24 * 60 * 60;
$cometinfo['card_date']=strtotime(gmdate('Y-m-d', ($d-25569) * $t));

因为excel中返回的是一个数值,所以需要将其进行转化,转化方法是通过及$t的运算和gmdate的转格式。这里需要注意的时“25569”这个值,如查发现用这个值不能输出正确的时间,则改用“gmdate('Y-m-d', (41728.732916667 - $d) * $t);”,因为不同的excel中代表的日期起启日期不同,有的是1900年,有的则是1970年。

 

你可能感兴趣的:(PHP技术应用,工作记录,PHPCMS常见问题)