施用PHPExcel判別和格式化Excel中的日期格式

來源:互聯網
上載者:User
使用PHPExcel判別和格式化Excel中的日期格式
最近,在做一個匯入功能,在系統中使用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,'
'; } $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

1 樓 xiaoluozi513 2012-10-28

if (preg_match('/^(\[\$[A-Z]*-[0-9A-F]*\])*[hmsdy]/i', $formatcode))
看不懂這句判斷依據是什麼,$formatcode的值好像都是“General”

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.