PHPExcel是一款优秀的处理Excel文件读写的开源PHP Library,能够给我们提供强大的Excel读写能力,本文针对Excel处理过程中关于日期和时间类型的处理进行深入的讨论。PHPExcel最新的版本是2014年3月2日发布的1.8.0版本,后来项目迁移到了GitHub,后续的版本已经更名为PHPSpreadSheet。

一、Excel中的日期和时间类型

Excel中的日期存储的是数值类型,计算的是从1900年1月1日到现在的数值。例如2008-12-31实际上存储的是39813。可以在Excel中验证,首先在一个单元格中输入2008-12-31,然后将单元格格式修改为“常规”,然后就会看到单元格内容变成了39813。

Excel中的时间是一个从0到0.99999999之间的小数值,表示从00:00:00(12:00:00 AM)到23:59:59(11:59:59 PM)之间的时间。例如12:00 PM的数值是0.5,表示一天的一半。

Excel 2007版本中提供了24种默认的日期类型格式,其中带星号的两个会和系统时区绑定(这样在不同时区的电脑之间传递文件时,时间会发生变化)其他的则不会根据时区发生变化。时间则提供了11种格式。

二、使用PHPExcel读取Excel中的日期和时间类型

我制作了一个模板Excel文件,按照中文日期类型输入了24个日期值,如下所示:

使用下面这段代码来读取数据,可以看到,在PHPExcel预置了格式的可以正常显示,否则会显示数值。注意如果打开了setReadDataOnly这个选项,则getFormattedValue函数将总是返回数值。

require_once '/libs/PHPExcel-1.8.0/Classes/PHPExcel.php';

require_once '/libs/PHPExcel-1.8.0/Classes/PHPExcel/IOFactory.php';

require_once '/libs/PHPExcel-1.8.0/Classes/PHPExcel/Shared/Date.php';

$filename = "PHPExcel_Date.xlsx";

$objReader = PHPExcel_IOFactory::createReaderForFile($filename);

//$objReader->setReadDataOnly(true);

$objPHPExcel = $objReader->load($filename);

$data['sheetsinfo'] = $objReader->listWorksheetInfo($filename);

$objWriter = '';

$objPHPExcel->setActiveSheetIndex(0);

$worksheet = $objPHPExcel->getActiveSheet();

$columnCount = PHPExcel_Cell::columnIndexFromString( $worksheet->getHighestColumn() );

$rowCount = $worksheet->getHighestRow();

echo "

for($row = 1; $row <= $rowCount; $row++){

$cell = $worksheet->getCellByColumnAndRow(0, $row);

$cellstyleformat = $worksheet->getStyle($cell->getCoordinate())->getNumberFormat();

$formatcode = $cellstyleformat->getFormatCode();

$f_value = $cell->getFormattedValue();

$value = $cell->getValue();

$p_value = PHPExcel_Shared_Date::ExcelToPHP($value);

echo "

$f_value$value$formatcode$p_value";

}

echo "

";

返回的结果:

第一列是读取格式化之后的数据,可以看到部分格式没有能够正常显示,是因为PHPExcel预置的日期格式没有匹配到,导致按照数值进行显示。第二列是直接获取数值。第三列是格式化代码。最后一列是转化为PHP格式的时间。

三、使用PHPExcel写入格式化后的日期和时间数据

PHPExcel中提供了22种默认的日期格式,我们可以将日期进行格式化后写入,这样Excel打开的时候看到的就是格式化后的时间,运行以下代码(接上面的部分)。

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel2007');

$worksheet->setTitle("Date Test");

$phpexcel_date_format = array(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD, PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD2, PHPExcel_Style_NumberFormat::FORMAT_DATE_DDMMYYYY, PHPExcel_Style_NumberFormat::FORMAT_DATE_DMYSLASH, PHPExcel_Style_NumberFormat::FORMAT_DATE_DMYMINUS, PHPExcel_Style_NumberFormat::FORMAT_DATE_DMMINUS, PHPExcel_Style_NumberFormat::FORMAT_DATE_MYMINUS, PHPExcel_Style_NumberFormat::FORMAT_DATE_DATETIME, PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME1, PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME2, PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME3, PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME4, PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME5, PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME6, PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME7, PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME8, PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDDSLASH, PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX14, PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX15, PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX16, PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX17, PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX22);

foreach ($phpexcel_date_format as $key => $value) {

//$cell = $worksheet->getCellByColumnAndRow(2, $key + 1);

//$cell->setValue(time())->setFormatCode($value);

$worksheet->setCellValue('C'.($key+2), PHPExcel_Shared_Date::PHPToExcel(time()));

$worksheet->getStyle('C'.($key+2))->getNumberFormat()->setFormatCode($value);

echo time() . "-" . $value;

}

$objWriter->save($filename);

可以看看文件保存后的结果。

至此,我们基本上可以自如的处理Excel的日期字段的读取和写入了。

参考资料:

phpexcel 日期 时分秒_PHPExcel对于Excel中日期和时间类型的处理相关推荐

  1. 电脑表格日期怎么修改原有日期_“电脑表格日期格式怎么改“如何把excel中日期格式设置为2001-01-01...

    如何在EXCEL中改变日期格式 1.打开需置日期格式的excel表. 2.选中日期所在的格,单击鼠键,选择"设置单元格格式"选项. 3.在弹对话框"数字"标签中 ...

  2. JSTL fmt标签格式化日期时分秒显示为00:00:00和12:00:00问题

    2019独角兽企业重金招聘Python工程师标准>>> 记录下今天fmt格式化日期时分秒碰到的坑吧,今天用fmt:formatDate标签格式化一个日期的时候HH:mm:ss还是hh ...

  3. excel中日期转换成指定的文本格式

    Excel中的日期格式经常不是YYYY-MM-DD这种格式,但是在使用是经常需要转换成这种格式,可以使用如下的方式进行处理. 1.如果只是单纯的显示,不修改具体值的话,可以在B列上点击右键,然后如下图 ...

  4. Date日期——格式化日期时分秒

    // 格式化日期 时分秒 var date = new Date(); console.log(date.getHours()); //时 console.log(date.getMinutes()) ...

  5. 计算机函数中数与数之间的冒号,如何在数字之间插入冒号以使其在Excel中自动成为时间格式?...

    如何在数字之间插入冒号以使其在Excel中自动成为时间格式? 当您在工作表单元格中插入时间格式时,您是否曾经每次输入冒号都感到烦恼? 在本文中,我将讨论在输入数字以使其在Excel中自动成为时间格式时 ...

  6. sql中两个时间类型相减得到的值

    原文地址为: sql中两个时间类型相减得到的值 原文地址:http://my.oschina.net/zimingforever/blog/57504 sql中两个时间类型相减得到的值 今天有人把数据 ...

  7. phpexcel 日期 时分秒_thinkPHP+PHPExcel实现读取文件日期的方法含时分秒

    Vendor('PHPExcel.PHPExcel.IOFactory'); $inputFileName = 'Public/demo/demo.xls'; $objReader = new PHP ...

  8. PHPExcel对于Excel中日期和时间类型的处理

    PHPExcel是一款优秀的处理Excel文件读写的开源PHP Library,能够给我们提供强大的Excel读写能力,本文针对Excel处理过程中关于日期和时间类型的处理进行深入的讨论.PHPExc ...

  9. sql 获取日期时分秒_Sql 中获取年月日时分秒的函数

    1. GETDATE() 返回当前的时间和日期. 语法:getdate() select getdate() 2. CONVERT() 把日期转换为新数据类型的通用函数,可以用不同的格式显示日期/时间 ...

  10. python秒换算成时分秒_Python以分钟和秒为单位读取excel日期,时分秒

    import xlrd from xlrd import xldate_as_tuple from datetime import datetime # 处理excel依赖xlrd模块 pip ins ...

最新文章

  1. Java基础篇:反射
  2. 「SAP 技术」SAP BP显示供应商账户组时候的怪现象
  3. Android应用程序注冊广播接收器(registerReceiver)的过程分析
  4. 【多线程】线程池拒绝策略详解与自定义拒绝策略
  5. css选择器 nth-child
  6. 如何切换 SVN 用户名
  7. 一步步实现SDDC-逻辑交换与逻辑路由
  8. Hive ntile函数
  9. linux内核的诞生时间,Linux内核诞生已经17年
  10. 决策树准确率低原因_决策树算法
  11. i.MX6ULL终结者RS232驱动测试及RS485测试
  12. c# mysql varbinary_c# – 从数据库读取SQL Varbinary Blob
  13. linux用vi使一个段落对齐,12.8 Linux下vi命令和shell学习
  14. props写法_详解Vue内部怎样处理props选项的多种写法
  15. 计算机辅助齿轮图标注,面向齿轮的计算机辅助设计、制造及检测设计(CAD图纸全套).doc...
  16. python中numpy函数ftt_语音MFCC提取:librosa python_speech_feature(2019.12)
  17. 起风了数字简谱用计算机,起风了钢琴简谱-数字双手-买辣椒也用券 高橋優
  18. 怎么用手机压缩图片?教给大家三种手机压缩图片方法
  19. 计算机台式右上角三个灯作用,键盘上的三个灯分别代表什么意思 三个灯各有什么作用呢...
  20. 电气专业出来如何月入过万?

热门文章

  1. C++基础知识面试精选100题系列(21-30)[C++ basics]
  2. IntelliLock
  3. SQL 必知必会·笔记6使用数据处理函数
  4. 将CString转换成string ...
  5. 由《资深架构师带你玩转框架封装》课程——我的实践
  6. Docker 快速安装教程
  7. centos 更新内核步骤
  8. jQuery的文档操作
  9. 驱动编译的时候注意编译工程选项
  10. TFS Two Build Definations Share the Same Code Branch