<?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;
}
?>