使用PHPExcel判别和格式化Excel中的日期格式的例子

发布时间:2020-03-19编辑:脚本学堂
做一个导入功能时,在系统中使用PHPExcel类库,读取上传的Excel文件,然后进行字段映射,最后将Excel内的数据导入到系统中。其中,关于日期格式的导入,遇到点麻烦。

     首先,如何导入日期,因为phpexcel中日期格式在获取时得到的是数字,并不是日期字符串,于是,网上就有许多代码,用于将Excel中获取的数字转换成PHP使用的Unix Time,其实不必这么麻烦。phpexcel中就有这样的方法:PHPExcel_Shared_Date::ExcelToPHP($value) 。可以直接使用。

     另外,如何自动判别Excel单元格是日期类型,看着PHPExcel文档和源码,实现如下:
 

复制代码 代码如下:
    function Read_Excel_File2($file_name,&$result){ 
        require_once 'include/PHPExcel/Classes/PHPExcel/IOFactory.php'; 
        $result=null; 
        $objReader = PHPExcel_IOFactory::createReader('Excel5'); 
    //    $objReader->setReadDataOnly(true); 
        try{ 
            $objPHPExcel = $objReader->load($file_name); 
        }catch(Exception $e){} 
        if(!isset($objPHPExcel)) return "无法解析文件"; 
        $allobjWorksheets = $objPHPExcel->getAllSheets(); 
        foreach($allobjWorksheets as $objWorksheet){ 
            $sheetname=$objWorksheet->getTitle(); 
            $highestRow = $objWorksheet->getHighestRow(); // e.g. 10 
            $highestColumn = $objWorksheet->getHighestColumn(); 
            $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); 
            for ($row = 1; $row <= $highestRow; ++$row) { 
                for ($col = 0; $col <= $highestColumnIndex; ++$col) { 
                    $cell =$objWorksheet->getCellByColumnAndRow($col, $row); 
                    $value=$cell->getValue(); 
                    if($cell->getDataType()==PHPExcel_Cell_DataType::TYPE_NUMERIC){ 
                        $cellstyleformat=$cell->getParent()->getStyle( $cell->getCoordinate() )->getNumberFormat(); 
                        $formatcode=$cellstyleformat->getFormatCode(); 
                        if (preg_match('/^([$[A-Z]*-[0-9A-F]*])*[hmsdy]/i', $formatcode)) { 
                           $value=gmdate("Y-m-d", PHPExcel_Shared_Date::ExcelToPHP($value)); 
                        }else{ 
                            $value=PHPExcel_Style_NumberFormat::toFormattedString($value,$formatcode); 
                        } 
    //                    echo $value,$formatcode,'<br>'; 
                         
                    } 
                    $result[$sheetname][$row-1][$col]=$value; 
                } 
            } 
        } 
        return 0; 
    } 

其中,关于日期判断的部分主要是以下部分:
 

复制代码 代码如下:
$cell =$objWorksheet->getCellByColumnAndRow($col, $row); 
    $value=$cell->getValue(); 
    if($cell->getDataType()==PHPExcel_Cell_DataType::TYPE_NUMERIC){ 
           $cellstyleformat=$cell->getParent()->getStyle( $cell->getCoordinate() )->getNumberFormat(); 
           $formatcode=$cellstyleformat->getFormatCode(); 
           if (preg_match('/^([$[A-Z]*-[0-9A-F]*])*[hmsdy]/i', $formatcode)) { 
                 $value=gmdate("Y-m-d", PHPExcel_Shared_Date::ExcelToPHP($value)); 
           }else{ 
                 $value=PHPExcel_Style_NumberFormat::toFormattedString($value,$formatcode); 
           } 
}

以上用到的PHPExcel版本是 1.7.2 。

您可能感兴趣的文章:
PHPExcel常用方法举例
php导出excel的简单范例 使用phpexcel类库导出excel
phpExcel类的使用方法分享
phpexcel导出excel的经典实例
PHPExcel读取excel文件的例子
phpexcel类库实例 支持(excel2003 excel2007)
phpexcel导出数据的实例代码
phpexcel导入excel到数据库的代码
phpexcel快速开发指南(不错)
phpExcel中文帮助手册(知识点)
phpexcel导出excel的颜色与网页中颜色不一致的解决方法
CI中使用PHPExcel导出数据到Excel