【PHP读取Excel内容为数组】

<?php
/*Excel读取模型*/
require_once './xlsx_reader.php';
$arr = get_xlsx_arr($xls_file,$xls_sheet,$xls_sheetname);
if(!empty($arr)) {
	$RowCount=count($arr); $ColumnCount=count($arr[1]);
	echo '<table border=1 cellspacing=0 cellpadding=0>';
	for($i=1;$i<=$RowCount;$i++){
		echo '<tr>','<td>',$i,'</td>';
		for($j=1;$j<$ColumnCount;$j++){
			/*12位以上数字科学计数法显示问题*/
			if(is_numeric($arr[$i][$j]) && strlen($arr[$i][$j])>11) $arr[$i][$j].=chr(0x7F); 
			echo '<td>',htmlspecialchars($arr[$i][$j],ENT_QUOTES),'</td>';
		}
		echo '</tr>';
	}
	echo '</table>';
}
?>
<?php
/*读取Excel模型*/
//xlsx_reader
//$arr = get_xlsx_arr($xls_file,$sheet,$sheet_name);

function get_xlsx_arr($xls_file,$xls_sheet='',$xls_sheetname=''){

	if(!isset($xls_sheet)) $xls_sheet=1;
	if(!isset($xls_sheetname)) $xls_sheetname='';
	$arr = array();  //结果数组

	/*PHPExcel库*/
	require_once '../PHPExcel/Classes/PHPExcel.php'; 

	/*初始化对象*/
	$PHPExcel = new PHPExcel(); 
	/**Excel2007*/
	$PHPReader = new PHPExcel_Reader_Excel2007(); 
	/**Excel2003*/
	if(!$PHPReader->canRead($xls_file)) { 
		$PHPReader = new PHPExcel_Reader_Excel5(); 
		if(!$PHPReader->canRead($xls_file))	{ 
			echo "<br>无Excel格式文件2!"; 
			return ;
		} 
	} 
	/**读取excel文件中的工作表*/ 
	$PHPExcel = $PHPReader->load($xls_file); 
	/* 工作表数量 */
	$sheetNumbers = $PHPExcel->getSheetCount(); 
	$sheetNames  = $PHPReader->listWorksheetNames($xls_file);
	//echo '<br>sheetNumbers: ',$sheetNumbers;
	/*一张表优化*/
	if($sheetNumbers==1) {
		$xls_sheet = 1;
		$xls_sheetname = $sheetNames[0];
	} else {
		/**读取工作表*/ 
		$xls_sheet = 0;
		foreach($sheetNames as $k => $sheetname)  { 
			if(strtolower($sheetname) == strtolower($xls_sheetname)) { 
				$xls_sheet = $k + 1; 
				break; 
			}
		}
		//为空
		if( $xls_sheet == 0 ) {
			echo "<br>$xls_sheetname 工作表不存在3!";
			return ;
		}
	}

	/*读工作表内容*/
	echo '<br>sheet: ',$xls_sheet,'---',$xls_sheetname;
	if($xls_sheet)
	{
		/**工作表下标*/ 
		$xls_sheet = $xls_sheet - 1;
		/**读取excel文件中的工作表*/ 
		$currentSheet = $PHPExcel->getSheet($xls_sheet); 
		/**取得一共有多少行*/ 
		$RowCount = $currentSheet->getHighestRow(); 
		//echo '<br>RowCount: ',$RowCount;
		/**取得最大的列号*/ 
		$ColumnCount = $currentSheet->getHighestColumn();  //A-Z
		/*字母列号转换成数字*/
		$ColumnCount = PHPExcel_Cell::columnIndexFromString($ColumnCount);  //AA+
		//echo '<br>ColumnCount: ',$ColumnCount;
		/**从第一行开始输出*/ 
		$xls_content='';
		for($currentRow = 1;$currentRow <= $RowCount;$currentRow++)
		{ 
			for($currentColumn = 0;$currentColumn<= $ColumnCount; $currentColumn++){
				//数字行列
				//$curValue = $currentSheet->getCellByColumnAndRow($currentColumn,$currentRow)->getValue();

				$ColumnName = PHPExcel_Cell::stringFromColumnIndex($currentColumn);  //数字转字母
				$address = $ColumnName.$currentRow;  //A1
				$curCell =$currentSheet->getCell($address); //获取第j行第i列的单元格对象 
				$curValue=$curCell->getValue(); //获取单元格里面的值 
				if($curCell->getDataType()==PHPExcel_Cell_DataType::TYPE_NUMERIC){  
					$cellstyleformat=$curCell->getStyle($curCell)->getNumberFormat(); 
					$formatcode=$cellstyleformat->getFormatCode();  
					if(strtolower($formatcode) != 'general'){ 
						echo '<br>',$address,':',$curValue,',',$formatcode;
					}
					if(strtolower($formatcode) == 'm/d/yyyy'){ 
						//转为时间  
						//$curValue=gmdate("Y-m-d", PHPExcel_Shared_Date::ExcelToPHP($curValue));
						$curValue = excelTime($curValue);
					}  
				}
				//读取到的数据,保存到数组$arr中
				//$colname = PHPExcel_Cell::stringFromColumnIndex($currentColumn);  //数字转字母
				//$colidx = PHPExcel_Cell::columnIndexFromString($currentColumn);  //字母转数字
				//echo '<br>---',$currentRow,'---',$currentColumn,'---',$curValue;
				$arr[$currentRow][$currentColumn+1] = htmlspecialchars($curValue);  //1+
				/*保存到字符串中*/
				$curValue = $curValue."\t";
				$curValue = str_replace("\r\n",'',$curValue);  //回车换行
				$curValue = str_replace("\n",'',$curValue);  //硬回车
				$xls_content .= $curValue;

			} 
			$xls_content .= "\r\n"; 
		} 

	}
	return $arr;
}

/**对excel里的日期进行格式转化*/ 
function excelTime($date, $time=false)
{ 
	$date_str=$date;
	if(is_numeric($date)) {
		/**显示格式为 “月/日/年” */ 
		$jd = GregorianToJD(1, 1, 1970); 
		$gregorian = JDToGregorian($jd+intval($date)-25569); 
		/**显示格式为 “年-月-日” */ 
		$date = explode('/',$gregorian);  //12/29/2121
		$date_str = str_pad($date[2],4,'0', STR_PAD_LEFT)
			."-".str_pad($date[0],2,'0', STR_PAD_LEFT)
			."-".str_pad($date[1],2,'0', STR_PAD_LEFT)
			.($time?" 00:00:00":'');
	}
	return $date_str;
} 

?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值