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代码片段: sendFile/videoStream/sendEmail/phpexcel/ffmpeg/zip