解析上传的CSV文件不是什么难事,直接读取转成你想要的数组样子就OK了。

public function putStoreStockIn ($filePath = '') {
$file = fopen($filePath,'r');
// 每次读取CSV里面的一行内容
while ($csvData = fgetcsv($file)) {
$newDatas[] = $csvData;
}
fclose($file);
// 处理数据,重组数组(按业务需要)
foreach ($newDatas as $_key => $_value) {
$returnData[$_key]['A'] = $_value[0];
$returnData[$_key]['B'] = $_value[1];
$returnData[$_key]['C'] = $_value[2];
$returnData[$_key]['D'] = $_value[3];
}
return $returnData;
}

PHPExcel 上传excle文件,解析时,可能会出现返回数据不正确,或为NULL的情况,这时候可能要考虑你上传的excle版本了,不同的版本在PHPExcel中药用不同的方法来读取。还有可能,你的业务场景需要对解析后的数据值进行判断时,我遇到过在windows的WPS,mac的number上,都会有默认的几行NULL值跟文件一同上传过来,而且怎么也去不掉,所以如果需要判断解析的数组值得话,可能会出错,为了避免这样的情况,在取值时过滤掉NULL值,不要它就好了。

public function analysisexcToArray($filePath = '', $sheet = 0) {
// 这个PHPExcel路径就自己看着改啦
import('Vendor.PHPExcel.PHPExcel');
import('Vendor.PHPExcel.PHPExcel.IOFactory.php');
// 判断文件路径
if(empty($filePath) or !file_exists($filePath)) {
return FALSE;
}
// 建立reader对象(这里是用于适用两种excle版本的导入)
$PHPReader = new \PHPExcel_Reader_Excel2007();
if(!$PHPReader->canRead($filePath)){
$PHPReader = new \PHPExcel_Reader_Excel5();
if(!$PHPReader->canRead($filePath)){
return FALSE;
}
}
// 建立excel对象
$PHPExcel = $PHPReader->load($filePath);
// 读取excel文件中的指定工作表
$currentSheet = $PHPExcel->getSheet($sheet);
// 取得最大的列数
$allColumn = $currentSheet->getHighestColumn();
$allRow = $currentSheet->getHighestRow();
$returnData = array();
// 整合为二维数组
for($rowIndex = 1; $rowIndex <= $allRow; $rowIndex++){
for($colIndex = 'A'; $colIndex <= $allColumn; $colIndex++){
$addr = $colIndex.$rowIndex;
$cell = $currentSheet->getCell($addr)->getValue();
// 富文本转换字符串
//instanceof 作用1)判断一个对象是否是某个类的实例,(2)判断一个对象是否实现了某个接口。
if($cell instanceof PHPExcel_RichText){
$cell = $cell->__toString();
}
// 过滤空行
if (!is_null($cell)) {
$returnData[$rowIndex][] = $cell;
}
}
}
return $returnData;
}

php上传excle文件,csv文件解析为二维数组的更多相关文章

  1. 从txt文件中读取数据放在二维数组中

    1.我D盘中的test.txt文件内的内容是这样的,也是随机产生的二维数组 /test.txt/ 5.440000 3.4500006.610000 6.0400008.900000 3.030000 ...

  2. ***php解析JSON二维数组字符串(json_decode函数第二个参数True和False的区别)

    客户端的请求体中的数据:[{"msg_id": 1, "msg_status": "HAS_READ" }, { "msg_id& ...

  3. SpringMVc上传excel或csv文件

    1.JSP页面代码 <form enctype=""multipart/form-data" method="post"> <inp ...

  4. c++读取文件内容并保存到二维数组

    每行数据最后需要Tab处理 #include <iostream> #include <fstream> #include <string> using names ...

  5. SpringMVC文件上传 Excle文件 Poi解析 验证 去重 并批量导入 MYSQL数据库

    SpringMVC文件上传 Excle文件 Poi解析并批量导入 MYSQL数据库  /** * 业务需求说明: * 1 批量导入成员 并且 自主创建账号 * 2 校验数据格式 且 重复导入提示 已被 ...

  6. php 文件上传后缀名与文件类型对照表(几乎涵盖所有文件)

    网上有很多php文件上传的类,文件上传处理是php的一个特色(至少手册上是将此作为php特点来展示的,个人认为php在数组方面的优异功能更有特 色),学php的人都知道文件上传怎么做,但很多人在编程中 ...

  7. go语言处理文件上传和多个文件上传

    uploadOne.html代码如下: <!doctype html> <html lang="en"> <head> <meta cha ...

  8. android 图片上传到服务端 文件损坏问题

    在网上找的例子,怎么试都不行. 上传上去之后提示文件损坏,不过最后问题还是找到了. 是因为不能在写入流的byte中写入其他内容 这是网上的例子 如果是要在服务端取文件名,可以在这里写入 在服务端获取文 ...

  9. input上传指定类型的文件

    1. 谷歌–上传文件夹 添加属性webkitdirectory <input type = "file" webkitdirectory> 2. 上传文件–限制类型 添 ...

随机推荐

  1. modelform组件以及ChoiceField属性

    一. Forms组件补充 1.__init__() 如果继承forms.Form的类中的每一个字段,或者大部分字段都做了相同的约束,可以将该约束放到__init__中编写 实例:每一个字段都需要添加f ...

  2. element-ui源码之组件通信那些事

    最近在用element-ui重构前端项目,无意之中翻阅到一个比较好用的组件间通信方式,借助于vue的封装的发布-订阅消息模式与mixin语法.在开始之前先总结下vue常用的组件间通信方式,具体如下: ...

  3. Docker 安装mysql容器数据卷挂载到宿主机

    环境 Centos:7 Docker: 17.05-ce Mysql: 5.7 1. Mysql外部数据和配置文件路径 msyql配置文件路径:/etc/mysql mysql数据卷路径:/var/l ...

  4. javascript匿名函数自调用

    // 匿名函数的自调用 /*var f1 = function() { console.log('我是一个匿名函数!'); }*/ // f1(); // 上面是定义一个匿名函数,然后调用,其实上面就 ...

  5. HTTP协议之应用

    通过对http协议的理解.我们可以根据这些特性来进行一些应用. 1.我们可以根据http请求的头信息refer信息,我们可以来做网站的防盗链.refer记录访问到目标网站的上次访问路径.这样我们可以来 ...

  6. Java学习笔记——三层架构

    Layer: UI层: user interface 用户接口层 Biz层:   service business login layer 业务逻辑层 DAO层:   Date Access Obje ...

  7. Codeforces Round #568 (Div. 2)B

    B. Email from Polycarp 题目链接:http://codeforces.com/contest/1185/problem/B 题目: Methodius received an e ...

  8. ubuntu镜像快速下载

    由于官网服务器在国外,下载速度奇慢,所以我们可以利用阿里云镜像下载ubuntu ubuntu 14.04: http://mirrors.aliyun.com/ubuntu-releases/14.0 ...

  9. Smobiler控件的使用:ListView的数据绑定及实现多选

    环境 SmobilerDesigner 4.7 Visual Studio 2010以上 正文 listview绑定数据 打开Visual Studio ,新建一个SmobilerApplicatio ...

  10. kubernetes实战之consul篇及consul在windows下搭建consul简单测试环境

    consul是一款服务发现中间件,1.12版本后增加servicemesh功能.consul是分布式的,可扩展的,高可用的根据官方文档介绍,目前已知最大的consul集群有5000个节点,consul ...