PHPExcel导入含有下拉框和日期

PHPExcel导入含有下拉框和日期
1.当表格导入含有下拉框时,使用setReadDataOnly(TRUE),
2.当表格导入同时含有下拉框 和日期的优化

<?php
use PHPExcel;
use PHPExcel_Reader_Excel2007;
use PHPExcel_Reader_Excel5;
use PHPExcel_Shared_Date;
use PHPExcel_Cell_DataType;
use PHPExcel_Cell;
use PHPExcel_Style_NumberFormat;

   /**
    * 解决表格有下拉框和日期变成数字问题  使用setReadDataOnly(true)可以解决下拉框,但是日期会变成数字
    *
    * 读取excel内容
    * @param string $filePath
    * @param int $sheet
    * @return array
    */
   public static function readEXCELDate($filePath, $sheet = 0, $dateCol = [])
   {
       if (!file_exists($filePath)) {
           return 'File Not Exists';
       }

       $PHPReader = new PHPExcel_Reader_Excel2007();
       if (!$PHPReader->canRead($filePath)) {
           $PHPReader = new PHPExcel_Reader_Excel5();
           if (!$PHPReader->canRead($filePath)) {
               return "File Can Not Be Readed.";
           }
       }
       #只读取表格数据,忽略里面的各种格式,否则会内存耗尽
       $PHPReader->setReadDataOnly(TRUE);
       $PHPExcel = $PHPReader->load($filePath);

       if (is_int($sheet)) {
           $currentSheet = $PHPExcel->getSheet($sheet);
       } else {
           $currentSheet = $PHPExcel->getSheetByName($sheet);
       }
       if (empty($currentSheet)) {
           return "Sheet Not Exists.";
       }

       /**取得一共有多少列*/
       $maxColumn = $currentSheet->getHighestColumn();
       $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($maxColumn);

       /**取得一共有多少行*/
       $rowCount = $currentSheet->getHighestRow();

       $result = array();
       for ($row = 1; $row <= $rowCount; $row++) {
           $totalLen = 0; //记录行总长度
           for ($col = 0; $col <= $highestColumnIndex; ++$col) {
               $cell =$currentSheet->getCellByColumnAndRow($col, $row);
               $value=$cell->getValue();
               // excel导入进来后:excel时间为2014-5-27这种格式,但是导入php文件时却是41986一串数字,解决办法:
               if($cell->getDataType() == PHPExcel_Cell_DataType::TYPE_NUMERIC){
                   //  //版本过低的话请加上 getParent 例:$cell->getParent()->getStyle($cell->getCoordinate())->getNumberFormat();
                   $cellstyleformat = $cell->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 {
                       //PHPExcel 能够将日期/时间值识别为日期/时间,但是使用了setReadDataOnly(true),识别不了,所以多加一个判断
                         if (in_array($col,$dateCol)){
                             $value = date("Y-m-d", strval(PHPExcel_Shared_Date::ExcelToPHP($value)));
                         }else {
                             $value = PHPExcel_Style_NumberFormat::toFormattedString($value,$formatcode);
                         }
                   }

               }
               if (is_object($value)) {
                   $value = $value->__toString();
               }
               $value = trim($value);
               $result[$row][] = $value;
               $totalLen += strlen(trim($value));
           }
           if ($totalLen == 0) unset($result[$row]); //去掉空行
       }
       return array_values($result);
   }
// $dateCol 第几列为日期数据
$dateCol  = [0];
self:: readEXCELDate($filePath, 0, $dateCol);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值