用到的技术:Layui框架、TP5、Ajax

注意:该方法,需要composer安装拓展包,当然思路最重要

前端样式

前端关键代码

    <input type="hidden" name="iccid_list" id="iccid_list" value=""><div class="layui-form-item"><div class="layui-input-block"><div class="layui-btn"><input type="file" disabled="disabled" name="file" id="upload"></div><button type="button" lay-submit="do" class="layui-btn" id="expExcel"name="exportExcel"><i class="layui-icon"></i>下载示例表格</button></div></div><div class="layui-footer" style="left: 0;"><button class="layui-btn" lay-submit="" lay-filter="component-form-demo1">立即提交</button><button type="reset" class="layui-btn layui-btn-primary">重置</button></div><input type="hidden" name="iccid_list" id="iccid_list" value="">
<script>  //指定允许上传的文件类型upload.render({elem: '#upload', url: '{:Url("uploadIccid")}', accept: 'file' //普通文件, exts: 'xls|excel', done: function (res) {if (res != '') {//处理上传表格内的数据,添加到input的隐藏域中$("#iccid_list").attr("value", res.map(Number));layer.msg('上传成功');}}});//点击提交,将表单数据传到后台form.on('submit(component-form-demo1)', function (data) {$.ajax({'url': '{:Url("index")}','data': JSON.stringify(data.field),'success': function (data) {if (data.code === 1) {parent.layer.alert(data.msg, {title: '成功'});} else {parent.layer.alert(data.msg, {title: '失败'});}location.reload();},'dataType': 'json',//返回的格式'type': 'post',//发送的格式});return false;});
</script>

后端代码

该部分主要是处理表格内的数据,解析为想要的格式
//可以将下列代码,放到common中,便于多次调用
function importExecl($file = '', $sheet = 0)
{$file = iconv('utf-8', 'gb2312', $file);   //转码if (empty($file) or !file_exists($file)) {die('file not exists!');}$objRead = new PHPExcel_Reader_Excel2007();   //建立reader对象if (!$objRead->canRead($file)) {$objRead = new PHPExcel_Reader_Excel5();if (!$objRead->canRead($file)) {die('No Excel!');}}$cellName = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S','T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL','AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ',);$obj = $objRead->load($file);  //建立excel对象$currSheet = $obj->getSheet($sheet);   //获取指定的sheet表$columnH = $currSheet->getHighestColumn();   //取得最大的列号$columnCnt = array_search($columnH, $cellName);$rowCnt = $currSheet->getHighestRow();   //获取总行数$data = array();for ($_row = 1; $_row <= $rowCnt; ++$_row) {  //读取内容for ($_column = 0; $_column <= $columnCnt; ++$_column) {$cellId = $cellName[$_column] . $_row;$cellValue = $currSheet->getCell($cellId)->getValue();//$cellValue = $currSheet->getCell($cellId)->getCalculatedValue();  #获取公式计算的值if ($cellValue instanceof PHPExcel_RichText) {   //富文本转换字符串$cellValue = $cellValue->__toString();}$data[$_row][$cellName[$_column]] = $cellValue;}}return $data;
}
该部分主要用来接受file文件,然后调用上面的方法,处理,返回想要的数据
 /*** 上传表格*/public function uploadIccid(){$file = $this -> request -> file('file');if(empty($file)){$this->error('上传文件内容为空,导入失败');}$file_check = $file->getInfo()['name'];//获取文件名称$file_type = substr($file_check,strripos($file_check,".")+1);if(!in_array($file_type,['xls','xlsx'])){$this -> error('上传文件格式有误,只允许表格');}$file_base_path = $file->getPath();$file_name = $file->getFilename();$file_path = $file_base_path.DS.$file_name;$excel = importExecl($file_path);//删除单元格名称$data = array_splice($excel,1);$dataIccid = [];$i= 0;foreach ($data as $key=>$value){$dataIccid[$i] = $value['A'];$i +=1;}return $dataIccid;}

效果

总结:

其实可以将该方法封装成一个共通方法,便于以后多次调用。
原理,就是前端传递表格文件,后端处理文件使之成为想要的数据,然后将数据传给前端,将数据塞到前端的隐藏域中,最后利用form表单或者ajax提交保存数据即可。

PHP上传excel,处理表格数据,并利用ajax提交保存数据相关推荐

  1. Ajax(form表单文件上传、请求头之contentType、Ajax传递json数据、Ajax文件上传)

    form表单文件上传 上菜 file_put.html <form action="" method="post" enctype="multi ...

  2. ajax怎么发送数据给php,ajax怎么发送数据给php

    在网上看了很久,发现数据的利用ajax提交数据到后台其实很简单,但是很多讲解的并不清楚,对于初学者来说,很多真的是看着有点糊涂,拿来直接用,又想去了解怎么回事,其实利用ajax提交数据到后台是非常的简 ...

  3. 自己做项目时整理的上传Excel表格

    Thinkphp5实现导入excel表格 (1)下载PHPExcel-1.7.7(jb51.net) 插件 (2)将其下的Classes 解压到框架vendor文件夹下并进行重命名 (3)前端代码 ( ...

  4. python 通过上传excel对数据分割分组导出

    废话不多说,直接开讲! 昨天接到任务:通过上传excel表格数据,对数据进行500一组分组分割到excel表格进行导出!说实在的,这个问题并不常见!但是感觉可以实现,于是乎今天写博客记录下! 好了,废 ...

  5. springboot上传excel表格到数据库

    1.引入相关poi依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi< ...

  6. 【Vue】vue2上传Excel表格到后台 实战教程(接上一篇下载Excel模板表格到本地)

    参考文章 作者原文链接入口 项目场景: 关于数据新增,需要从后台下载一个Excel表格,然后在表格里面添加数据,再上传给后台,后台做解析处理,往数据库添加数据 问题描述 需要用到elementUI的文 ...

  7. php上传查询excel到mysql_PHP上传Excel文件导入数据到MySQL数据库示例

    PHP上传Excel文件导入数据到MySQL数据库示例2020-06-20 00:34:11 最近在做Excel文件导入数据到数据库.网站如果想支持批量插入数据,可以制作一个上传Excel文件,导入里 ...

  8. php 上传excel到mysql_PHP上传Excel文件导入数据到MySQL数据库示例

    最近在做Excel文件导入数据到数据库.网站如果想支持批量插入数据,可以制作一个上传Excel文件,导入里面的数据内容到MySQL数据库的小程序. 要用到的工具: ThinkPHP:轻量级国产PHP开 ...

  9. laravel-admin / Dcat admin 上传Excel并导入数据到数据库

    准备工作 安装maatwebsite/excel composer require maatwebsite/excel laravel-admin 效果图 创建按钮 $grid->tools(f ...

最新文章

  1. JetsonTX2上安装tensorflow的心酸史
  2. 【解析】工业机器人中的各类传感器技术应用
  3. 文本主题模型之非负矩阵分解(NMF)
  4. php小程序地图处理,微信小程序 地图map详解及简单实例
  5. sort,uniq,fmt,wc,提取开头和结尾的命令的使用
  6. golang中的httptest
  7. 路由器的×××流量过滤
  8. Codeforces Round #382 (Div. 2)B. Urbanization 贪心
  9. 云原生那些顶级开源项目,你都用过哪些?
  10. ipad2018编写html,IT教程:ipad6是ipad2018吗
  11. python数据结构与算法分析_数据结构和算法分析
  12. backupexec mysql_MySQL备份可能遇到的坑
  13. 惠普电脑怎么截屏_惠普(HP)暗影精灵6游戏台式电脑主机怎么样?配置和使用体验测评-最新资讯...
  14. 植物病害鉴定真的需要深度CNN吗?
  15. java数组线性查找_数组查找: 线性查找与二分查找
  16. popmenu 和popWindow
  17. Backstepping反步法控制四旋翼无人机(一)
  18. 004/160 CrackMe ajj CKme
  19. 常用的数据库统计SQL语句(2)
  20. 昨天刚扩容80G,今天C盘就爆满了?C盘莫名其妙少了60G,使用Spacesniff也扫描不出来

热门文章

  1. #边学边记 必修5 高项:对人管理 第2章 项目沟通管理和干系人管理 2-1 沟通的基本概念
  2. 在Web Directions Code上获得推文并赢得Kindle Fire!
  3. 请问FXAA、FSAA与MSAA有什么区别?效果和性能上哪个好?
  4. uniapp 离线打包
  5. 火爆的智能健身镜,照见互联网健身“新常态”?
  6. 计算机网络-多路复用
  7. ASPMVC- Layout 使用
  8. Android layout_above的使用注意
  9. 快速学习半导体晶闸管
  10. retina屏幕截取验证码