PHPExcel导入含有下拉框和日期

Posted 年少~年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);

以上是关于PHPExcel导入含有下拉框和日期的主要内容,如果未能解决你的问题,请参考以下文章

PHP 用PHPExcel往数据库导入大量数据

markdown PHPExcel Notes和代码片段

php代码片段: sendFile/videoStream/sendEmail/phpexcel/ffmpeg/zip

element-ui中点击input框和下拉框会出现跳动的现象

phpexcel

PHPExcel使用-使用PHPExcel导入文件