当用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单元格富文本和时间类型读取数据问题的更多相关文章

  1. NPOI2.2.0.0实例详解(十)—设置EXCEL单元格【文本格式】 NPOI 单元格 格式设为文本 HSSFDataFormat

    NPOI2.2.0.0实例详解(十)—设置EXCEL单元格[文本格式] 2015年12月10日 09:55:17 阅读数:3150 using System; using System.Collect ...

  2. django——文件上传_分页_ajax_富文本_celery

    上传文件 概述 当Django在处理文件上传时,文件的数据被存储在request.FILES属性中 FILES只有在请求的方法为POST且提交的form表单带有enctype="multip ...

  3. 【Django组件】KindEditor富文本编辑器上传文件,html样式文本,VUE异步提交数据(易懂版)

    1:下载与配置 适合版本: python3 下载:http://kindeditor.net/down.php 文档:http://kindeditor.net/doc.php 将文件包放入stati ...

  4. 使用phpexcel上传下载excel文件

    1. 下载 <?php /** * Created by lonm.shi. * Date: 2012-02-09 * Time: 下午4:54 * To change this templat ...

  5. excel中在某一列上的所有单元格的前后增加

    excel中在某一列上的所有单元格的前后增加数字汉字字符等东西的函数这样写 “东西”&哪一列&“东西” 例如  “1111”&E1&“3333”

  6. Uploadify上传Excel到数据库

    前两章简单的介绍了Uploadify上传插件的基本使用和相关的属性说明.这一章结合Uploadify+ssh框架+jquery实现Excel上传并保存到数据库.         以前写的这篇文章 Jq ...

  7. 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的路由方案,与原来的方案在使用上差别不 ...

  8. 上传excel数据到数据库中

    上传excel表格数据到数据库 导入固定路径下的excel数据到数据库 <form id="disposeFlightDataForm" action="../up ...

  9. 通过POI实现上传EXCEL的批量读取数据写入数据库

    最近公司新增功能要求导入excel,并读取其中数据批量写入数据库.于是就开始了这个事情,之前的文章,记录了上传文件,本篇记录如何通过POI读取excel数据并封装为对象上传. 上代码: 1.首先这是一 ...

随机推荐

  1. 记一次"未将对象引用设置到对象的实例"问题的排查过程

    最近在给一个老项目做数据对接接口. 背景一 该项目最后更新日期为2006年,使用ASP.NET WebForm..Net2.0.OJB.Castle Avtive Record等.由于是某集团的子系统 ...

  2. Eclipse中將Java项目转变为Java Web项目

    1.在项目上点击右键=>properties,在Project Facets配置项中,勾选Dynamic Web Module.Java.JavaScript选项. 2.用记事本打开项目目录下的 ...

  3. python下py2exe打包笔记

    1.下载与python版本一致的py2exe插件包 2.安装py2exe,安装后在python目录下存在:\Lib\site-packages\py2exe\... 3.新建一个python脚本文件, ...

  4. UWP连接mysql 实现数据远程备份

    昨晚吃饭的时候突然觉得我们这个UWP应该添个数据备份的功能,不然换手机,换电脑之后数据库就全没了... 一开始是想用微软提供的AZURE的,没想到这玩意又没什么资料而且申请试用的时候还让我交身份证照片 ...

  5. 中级前端工程师要掌握的JavaScript 技巧

    1.判断对象的数据类型 2.Es5实现数组map方法 3.使用reduce实现数组map方法 4.ES5 实现数组filter方法 5.使用reduce实现filter方法 6.ES5 实现数组som ...

  6. B. Recursive Queries 打表

    Code: #include<cstdio> #include<iostream> #include<algorithm> #include<cstring& ...

  7. javascript的var声明变量和不用var声明变量在全局作用域的区别;

    在全局作用域下,使用var定义的变量不可以delete,没有var 定义的变量可以delete.也就说明隐含全局变量严格来说不是真正的变量,而是全局对象的属性,因为属性可以通过delete删除,而变量 ...

  8. finger---用于查找并显示用户信息

    finger finger命令用于查找并显示用户信息.包括本地与远端主机的用户皆可,帐号名称没有大小写的差别.单独执行finger指令,它会显示本地主机现在所有的用户的登陆信息,包括帐号名称,真实姓名 ...

  9. matlab 中语句 a(b)的意思

    a=[1 2; 3, 4; 5, 6]; b=[1 3 2 1; 1 2 4 2]; c=a(b) c =                 1     5     3     1 1     3   ...

  10. 题解 P3128 【[USACO15DEC]最大流Max Flow】

    此类型题目有两种比较常见的做法:树链剖分和树上差分. 本题有多组修改一组询问,因此树上差分会比树链剖分优秀很多. 这里两种方法都进行介绍. 树链剖分和树上差分的本质都是将一颗树转换为一个区间,然后进行 ...