[转]使用PHPExcel判别和格式化Excel中的日期格式
2023-09-14 09:03:21 时间
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
相关文章
- 【目录】C#操作Excel组件Spire.XLS系列文章目录
- Excel中线性规划求解
- 读取Excel表格日期类型数据的时候
- php读取excel日期类型数据的例子
- phpExcel常用方法详解【附有php导出excel加超级链接】
- POI对Excel自定义日期格式的读取
- 用python实现简单EXCEL数据统计的实例
- C# 对Excel文档打印时的页面设置
- SAP 系统里的中文数据,用 ABAP 导出成 Excel 文件时遇到乱码的分析和解决办法试读版
- 【原创】.NET读写Excel工具Spire.Xls使用(4)对数据操作与控制
- 丢掉Excel,手把手教你用Python做可视化数据,还能任意调节动画丝滑度
- Java:apache.poi读写Excel文件
- 用Java在excel单元格中设置超链接
- Bartender 使用 Excel xlsx 数据库时出现 0x800A0E7A
- 用VBA从word的表格中提取数据到excel中