解析上传的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. 三个臭皮匠,顶上一个诸葛亮——在Google Ideathon上Design Thinking分享

    4月26日很荣幸的被邀请参加Google Ideathon做Design Thinking的分享. 这次主要分享了Design Thinking的基本方法流程,以及在真实项目的运用.现在整理一下当时选 ...

  2. 多线程基础理论--C#

    1.主线程 进程创建时,默认创建一个线程,这个线程就是主线程.主线程是产生其他子线程的线程,同时,主线程必须是最后一个结束执行的线程,它完成各种关闭其他子线程的操作.尽管主线程是程序开始时自动创建的, ...

  3. Appium+python自动化(十)- 元素定位秘籍助你打通任督二脉 - 上卷(超详解)

    简介 你有道灵光从天灵盖喷出来你知道吗,年纪轻轻就有一身横练的筋骨,简直百年一见的练武奇才啊,如果有一天让你打通任督二脉,那还不飞龙上天啊.正所谓我不入地狱谁入地狱,警恶惩奸维护世界和平这个任务就交个 ...

  4. 小程序请求接口统一封装到一个js文件中

    在我们做小程序时,数据请求数据请求是避免不了的,然而我们用官方自带的请求方式,会给我们带来很多重复的工作,所以我就借鉴大神们的博客,写了一个简单的请求方式. 1.首先我们在utils中新建一个api. ...

  5. Zookeeper_ACL

    getAcl path 查看某个node的权限 设置权限1 world方式 setAcl <path> world:anyone:<acl>例如 setAcl /node1 w ...

  6. Git的忽略、分支、分支与主线的合并、远程仓库的操作

    如果想了解 Git 以及一些基础命令的使用,请看我的另一篇博客: http://www.cnblogs.com/haojun/p/7797508.html 这篇博客会跟大家介绍一下怎么在提交的时候忽略 ...

  7. 使用docker部署zabbix

    1 官方地址 官方写的很详细并且是中文的,一步步按照操作就可以 https://www.zabbix.com/documentation/3.4/zh/manual/installation/cont ...

  8. 试题--创建三个进程/线程,依次输出 A、B、C

    这是一道机试题,大概的预期执行结果如下图所示 最近刚好在学习linux编程,便使用多线程及多进程分别实现了一遍,其中多线程较为简单,使用0/1信号量在线程间实现生产者/消费者即可:多进程则稍微复杂一些 ...

  9. Codeforces 760B:Frodo and pillows(二分)

    http://codeforces.com/problemset/problem/760/B 题意:有n张床m个枕头,每张床可以有多个枕头,但是相邻的床的枕头数相差不能超过1,问第k张床最多能拥有的枕 ...

  10. scala刷LeetCode--21 合并两个有序链表

    一.题目描述 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 二.示例 输入:1->2->4, 1->3->4输出:1->1 ...