zoukankan      html  css  js  c++  java
  • [转]使用PHPExcel判别和格式化Excel中的日期格式

    From : http://renzhen.iteye.com/blog/799391

    最近,在做一个导入功能,在系统中使用PHPExcel类库,读取上传的Excel文件,然后进行字段映射,最后将Excel内的数据导入到系统中。其中,关于日期格式的导入,使我犯了难。 
      首先,如何导入日期,因为PHPExcel中日期格式在获取时得到的是数字,并不是日期字符串,于是,网上就有许多代码,用于将Excel中获取的数字转换成PHP使用的Unix Time,其实不必这么麻烦。PHPExcel中就有这样的方法:PHPExcel_Shared_Date::ExcelToPHP($value) 。可以直接使用。 
       如果到这里就结束,那这篇文章就有点太没意思了,在开发时,我还未一个问题犯了难,那就是如何自动判别Excel单元格是日期类型,照例,我Google了一遍,没有很好的文章解决这个问题,于是我就自己看着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

  • 相关阅读:
    转ihone程序内发邮件,发短信,打开链接等
    plist 文件的读写
    转object c语法速成
    转iphone项目之间的引用。
    object c求nsstring 长度和去掉前后空格的方法
    object c runtime中类类型和消息支持检查
    转NSDictionary类使用
    设置UITableview 浮动的 header
    NSString 类型plist转为NSDictionary
    ObjectiveC Unicode 转换成中文
  • 原文地址:https://www.cnblogs.com/Athrun/p/3322306.html
Copyright © 2011-2022 走看看