关于PHPExcel上传Excel单元格富文本和时间类型读取数据问题
当用PHPExcel做Excel上传文件读取数据时,print_r出来的数据,竟然发现其中有几个单元格返回的是PHPExcel富文本对象,而且时间类型的单元格返回的是一个不是时间戳的五位数。就像下图那样。
解决代码:
//读取到的数据,保存到数组$arr中
$excelData[$currentRow][$currentColumn] =(string) $currentSheet-> getCell($address)-> getValue(); //解决了返回的是富文本对象问题
后面的代码加了一个 excelTime函数。解决了时间类型问题。
全部代码:
public function uploadBatch(){
header("Content-type: text/html;charset=utf-8");//设置页面内容是html编码格式是utf-8
$cell=array();
$uploads="uploads";
$upload = new \Think\Upload();// 实例化上传类
$upload->maxSize = 5242880 ;// 设置附件上传大小
$upload->exts = array('xlsx','xls','csv');// 设置附件上传类型
$upload->rootPath = './'.$uploads.'/gz/'; // 设置附件上传根目录
$upload->subName = array('date','Ym');
// 上传单个文件
$info = $upload->uploadOne($_FILES['excel']);
if(!$info) {// 上传错误提示错误信息
$this->error($upload->getError());
}else{
//上传Excel成功
$exts = $info['ext'];
$file_name=$uploads.'/gz/'.$info['savepath'].$info['savename'];
$res=$this->getdata($file_name,$exts);
print_r($res);
//循环读取每行数据,进行写入数据库
foreach ( $res as $k => $v ){
if ($k != 0){
$data ['Name'] = $v [B];
$data ['Site'] = $v [C];
print_r($data);
}
}
if($result!=0){
$this->success("批量导入成功!", U("Gzjzgl/addBatchSuccess"));
}else{
$this->error("批量导入失败!");
}
}
} public function showData(){
header("Content-type: text/html;charset=utf-8");//设置页面内容是html编码格式是utf-8
$cell=array();
$uploads="uploads";
$upload = new \Think\Upload();// 实例化上传类
$upload->maxSize = 5242880 ;// 设置附件上传大小
$upload->exts = array('xlsx','xls','csv');// 设置附件上传类型
$upload->rootPath = './'.$uploads.'/gz/'; // 设置附件上传根目录
$upload->subName = array('date','Ym');
// 上传单个文件
$info = $upload->uploadOne($_FILES['excel']);
if(!$info) {// 上传错误提示错误信息
$this->error($upload->getError());
}else{
//上传Excel成功
$exts = $info['ext'];
$file_name=$uploads.'/gz/'.$info['savepath'].$info['savename'];
$res=$this->getdata($file_name,$exts);
$status="success";
print_r($res);
$data=array(
'data' => $res,
'status' => $status,
);
$this->ajaxReturn($data);
}
} //获取excel文件、读取数据方法
public function getdata($file_name,$exts='xls'){
//导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入
import("Org.Util.PHPExcel");
//创建PHPExcel对象,注意,不能少了
$PHPExcel=new \PHPExcel();
if ($exts =='xlsx') {
import("Org.Util.PHPExcel.Reader.Excel2007");
$PHPReader=new \PHPExcel_Reader_Excel2007();
} else if ($exts =='xls') {
import("Org.Util.PHPExcel.Reader.Excel5");
$PHPReader=new \PHPExcel_Reader_Excel5();
}
//载入文件
$PHPExcel=$PHPReader->load($file_name);
//获取表中的第一个工作表,如果要获取第二个,把0改为1,依次类推
$currentSheet=$PHPExcel->getSheet(0);
//获取总列数
$allColumn=$currentSheet->getHighestColumn();
//获取总行数
$allRow=$currentSheet->getHighestRow();
$excelData = array();
//循环获取表中的数据,$currentRow表示当前行,从哪行开始读取数据,索引值从0开始
for($currentRow=2;$currentRow<=$allRow;$currentRow++){
//从哪列开始,A表示第一列
for($currentColumn='A';$currentColumn<=$allColumn;$currentColumn++){
//数据坐标
$address=$currentColumn.$currentRow;
if($currentColumn=='I' || $currentColumn=='J'){
$excelData[$currentRow][$currentColumn] = (string)$this->excelTime($currentSheet-> getCell($address)-> getValue());
}else{
//读取到的数据,保存到数组$arr中
$excelData[$currentRow][$currentColumn] =(string) $currentSheet-> getCell($address)-> getValue();
}
}
}
return $excelData;
} function excelTime($date, $time = false) {
if(function_exists('GregorianToJD')){
if (is_numeric( $date )) {
$jd = GregorianToJD( 1, 1, 1970 );
$gregorian = JDToGregorian( $jd + intval ( $date ) - 25569 );
$date = explode( '/', $gregorian );
$date_str = str_pad( $date [2], 4, '0', STR_PAD_LEFT )
."-". str_pad( $date [0], 2, '0', STR_PAD_LEFT )
."-". str_pad( $date [1], 2, '0', STR_PAD_LEFT )
. ($time ? " 00:00:00" : '');
return $date_str;
}
}else{
$date=$date>25568?$date+1:25569;
/*There was a bug if Converting date before 1-1-1970 (tstamp 0)*/
$ofs=(70 * 365 + 17+2) * 86400;
$date = date("Y-m-d",($date * 86400) - $ofs).($time ? " 00:00:00" : '');
}
return $date;
}
关于PHPExcel上传Excel单元格富文本和时间类型读取数据问题的更多相关文章
- NPOI2.2.0.0实例详解(十)—设置EXCEL单元格【文本格式】 NPOI 单元格 格式设为文本 HSSFDataFormat
NPOI2.2.0.0实例详解(十)—设置EXCEL单元格[文本格式] 2015年12月10日 09:55:17 阅读数:3150 using System; using System.Collect ...
- django——文件上传_分页_ajax_富文本_celery
上传文件 概述 当Django在处理文件上传时,文件的数据被存储在request.FILES属性中 FILES只有在请求的方法为POST且提交的form表单带有enctype="multip ...
- 【Django组件】KindEditor富文本编辑器上传文件,html样式文本,VUE异步提交数据(易懂版)
1:下载与配置 适合版本: python3 下载:http://kindeditor.net/down.php 文档:http://kindeditor.net/doc.php 将文件包放入stati ...
- 使用phpexcel上传下载excel文件
1. 下载 <?php /** * Created by lonm.shi. * Date: 2012-02-09 * Time: 下午4:54 * To change this templat ...
- excel中在某一列上的所有单元格的前后增加
excel中在某一列上的所有单元格的前后增加数字汉字字符等东西的函数这样写 “东西”&哪一列&“东西” 例如 “1111”&E1&“3333”
- Uploadify上传Excel到数据库
前两章简单的介绍了Uploadify上传插件的基本使用和相关的属性说明.这一章结合Uploadify+ssh框架+jquery实现Excel上传并保存到数据库. 以前写的这篇文章 Jq ...
- ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 try.dot.net 的正确使用姿势 .Net NPOI 根据excel模板导出excel、直接生成excel .Net NPOI 上传excel文件、提交后台获取excel里的数据
ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 ASP.NET Core 从2.2版本开始,采用了一个新的名为Endpoint的路由方案,与原来的方案在使用上差别不 ...
- 上传excel数据到数据库中
上传excel表格数据到数据库 导入固定路径下的excel数据到数据库 <form id="disposeFlightDataForm" action="../up ...
- 通过POI实现上传EXCEL的批量读取数据写入数据库
最近公司新增功能要求导入excel,并读取其中数据批量写入数据库.于是就开始了这个事情,之前的文章,记录了上传文件,本篇记录如何通过POI读取excel数据并封装为对象上传. 上代码: 1.首先这是一 ...
随机推荐
- Python入门机器学习
如何通过Python入门机器学习 我们都知道机器学习是一门综合性极强的研究课题,对数学知识要求很高.因此,对于非学术研究专业的程序员,如果希望能入门机器学习,最好的方向还是从实践触发. 我了解到Pyt ...
- webpack的像素转vw loader插件
这是一款针对webpack的像素转vw单位的loader插件. 笔者公司中,h5 rem的开发方案目前已经渐渐开始转向vw方案,因此本工具应运而生. 目前所制作的h5,大部分设计稿分辨率都是750的宽 ...
- springMVC接受参数总结
springMVC接受参数分类及使用对应注解才能正确接受到参数,否则报400或者接受的参数值为null: 1.接受单个参数 @RequestParam 不需要转json串 2.接受一个实体 @Requ ...
- python 3.x 学习笔记13 (网络编程socket)
1.协议http.smtp.dns.ftp.ssh.snmp.icmp.dhcp....等具体自查 2.OSI七层应用.表示.会话.传输.网络.数据链路.物理 3.socket: 对所有上层协议的封装 ...
- (转载) EditText初始不弹出软键盘,只有光标显示,点击再弹出
EditText初始不弹出软键盘,只有光标显示,点击再弹出 2013-06-08 10:13 21305人阅读 评论(5) 收藏 举报 分类: android基础(91) 版权声明:本文为博主原创 ...
- (转载)Android滑动冲突的完美解决
Android滑动冲突的完美解决 作者:softwindy_brother 字体:[增加 减小] 类型:转载 时间:2017-01-24我要评论 这篇文章主要为大家详细介绍了Android滑动冲突的完 ...
- hdu1010 - dfs,奇偶剪枝
题目链接 给一个迷宫,问从起点到终点存不存在一条长度为T的路径. ------------------------------------------------------------------- ...
- 记我安装Caffe的血泪史(2)
不知不觉居然花了一个星期来安装Caffe...真是醉了. 接上一篇blog,本以为编译完cuda,opencv之后问题就差不多了(其实本来是没有什么问题的,但硬是被我搞了一堆事情出来....) 出于对 ...
- LCD段码驱动
假如要第3个数码关显示“8.”,则3A-3D均得为1,即Seg3和Seg4均得为1.假设模具Seg和驱动芯片Seg对应,则只需往HT1621的地址Seg3和Seg4分半发送0xF. 注意:HT1621 ...
- H5中嵌入flash
<object height="900px" width="100%" classid="clsid:D27CDB6E-AE6D-11cf-96 ...