最近,在做一个导入功能,在系统中使用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
分享到:
相关推荐
phpexcel 生成excel phpexcel 生成excel phpexcel 生成excel phpexcel 生成excel
php5.4环境下的 PHPExcel-1.8 使用,只要 Classes下的文件,并改名为 phpexcel 1,建立mysql数据库,把excel_demo.sql导入到你的数据库,采取utf-8编码; 2,导入时候请按照xls/demo.xls的格式导入,在linux系统下 ...
NULL 博文链接:https://zccst.iteye.com/blog/1233585
php使用PHPExcel读取Excel的demo
PHP开发中遇到的数据导入功能,发现此插件比较好用,实现代码见本人博客。PHPExcel Excel1.8导入导出。
PHPExcel-1.7.0 php 生成excel
Yii中使用PHPExcel,相信你看完本文档之后,疑点瞬即消失
phpexcel生成excel类功能强大,适合多版本excel,希望对大家有所帮助,谢谢。
PHPExcel是一款第三类插件,用于页面数据导出导入,生成excel数据格式
//各种自定义格式化方式中,其它类型都可以正常使用,但当setFormatCode //为 FORMAT_NUMBER 的时候,实际出来的效果被没有把格式设置为"0"。需要 //修改 PHPExcel_Writer_Excel5_Format 类源代码中的 getXf($...
结合phpExcel插件,写的一个读取excel2007、excel2003工作表内容,并返回二维数组的例子。可以自定义读取哪一张工作表,哪几列,哪几行的excel内容;可以进行扩展,修改里面的代码来适应你的项目。代码有充分的注释...
PhpExcel是php操作excel表格的第三方工具,能实现数据表格导出
PHP操作excel类(PHPExcel) 1.7.7PHP操作excel类(PHPExcel) 1.7.7PHP操作excel类(PHPExcel) 1.7.7
PhpExcel中文帮助手册|PhpExcel使用方法
分享一个利用phpexcel对数据库数据的导入excel(excel筛选)、导出excel的类。根据时间生成采购报表,实例化excel类,设置选定sheet表名,合并单元格 给单元格赋值(数值,字符串,公式),大边框样式 边框加粗,设置...
phpexcel的使用phpexcel的使用phpexcel的使用phpexcel的使用phpexcel的使用phpexcel的使用
用于php读取解析excel文件,用来操作Office Excel 文档的一个PHP类库,它基于微软的Openxml标准和PHP语言。可以使用它来读取、写入不同格式的电子表格。整体来说是一个不错的Excel操作类。
在ThinkPHP5.0.10框架下使用PHPExcel实现带图片excel表格的导入导出功能。application\index\model\ExcelDown.php文件中,第93行加上判断if($res[$i][$data['field'][$j]]!='')改为if($res[$i][$data['field'][$j]]!...