项目中需要批量导入数据,感觉这个需求以后也会经常用,必须总结分享下:
引入jquery的第三方表单插件:
  1. <scripttype="text/javascript"src="/js/lib/jquery.ajax.form.js"></script>
视图文件:goods_list.ctp(商品列表),
  1. <div class="btnimport">
    <form class='myupload' action="<?=$this->Html->url(array('controller'=>'Goods','action'=>'batchImport'))?>" method='post' enctype='multipart/form-data' id="form_<?php echo $good['Good']['id']?>">
    <input class="fileupload" type="file" name="importExcel" data-id="<?php echo $good['Good']['id']?>">
    </form>
    <span>批量导入</span>
    </div>
    <style type="text/css">
    .btnimport{position: relative;overflow: hidden;margin-right: 4px;display:inline-block; *display:inline;padding:4px 10px 4px;font-size:14px;line-height:18px; *line-height:20px;color:#fff; text-align:center;vertical-align:middle;cursor:pointer;background:#5bb75b; border:1px solid #cccccc;background-color: #1fb5ad;; border-bottom-color:#b3b3b3;-webkit-border-radius:4px; border-color: #1fb5ad; -moz-border-radius:4px;border-radius:4px; padding: 5px 10px; font-size: 12px; line-height: 1.5; border-radius: 3px; }
    .btnimport input{position: absolute;top: 0; right: 0;margin: 0;border:solid transparent; opacity: 0;filter:alpha(opacity=0); cursor: pointer;}
    </style>
使用input样子太丑了,还有个长条框,于是添加CSS修改样子做的和其他按钮样子一样。每个上传对应一个form表单,多个商品对应各自的上传事件,于是在form中添加id="form_<?php echo $good['Good']['id']?>",这样每个商品的导入就可以调用各自的ajaxSubmit事件。
传入的jquery, 使用ajaxsubmit来提交表单。Jquery表单插件ajaxForm用法详解
  1. <script type="text/javascript">
    $(function () {
    $(".fileupload").change(function(){
    var btnimport = $(".btnimport span");
    var id = $(this).data('id');
    $("#form_" + id).ajaxSubmit({
    dataType: 'json',
    data:{id:id},
    success: function(data) {
    switch(data['code']){
    case 0:{
    alert("批量导入成功");
    //btnimport.html("批量导入"); //按钮还原
    window.location.reload();
    break;
    }
    case -6000:{
    btnimport.html("上传失败");
    alert("上传失败!");
    break;
    }
    case -6001:{
    btnimport.html("上传失败");
    alert("文件格式不正确!");
    break;
    }
    default:{
    alert("系统繁忙,请稍后再试!");
    break;
    }
    }
    },
    error:function(xhr){
    btnimport.html("上传失败");
    }
    });
    });
    });
    </script>
action中的处理方法:
  1. /**
    * [batchImport 批量导入]
    * @return [type] [description]
    */
    public function batchImport(){
    $id = $this->request->data('id');
    $DOMAIN = $_SERVER['HTTP_HOST'];
    $file = $_FILES;
    $filename = $file['importExcel']['name'];
    $file_temp_name =$file['importExcel']['tmp_name'];
    $dir = WWW_ROOT.'/files' . DS . 'xls';
    $type = strstr($filename,'.');
    if($type != '.xls' && $type != '.xlsx'){
    $this->_err_ret(-6001,'sys err');
    }
    if(is_uploaded_file($file_temp_name)){ $full_name = $dir.DS. date ( 'Y-m-d_h:i:s' ).'_'.$filename;
    $result = move_uploaded_file($file_temp_name, $full_name);
    //处理文件路径,便于访问
    //$full_name = explode('webroot/', $full_name);
    //$full_name = 'http://' . $DOMAIN .'/aaa/bbb'.$full_name[1];
    }else{
    $this->_err_ret(-6000,'err');
    }
    //如果上传文件成功,就执行导入 excel操作
    $objReader = PHPExcel_IOFactory::createReaderForFile($full_name);
    $objPHPExcel = $objReader->load($full_name);
    $objPHPExcel->setActiveSheetIndex(0);
    $sheet = $objPHPExcel->getSheet(0);
    $highestRow = $sheet->getHighestRow(); // 取得总行数
    $test = $objPHPExcel->getActiveSheet()->getCell('A2')->getValue();
    $data = array();
    for ($i=2; $i <= $highestRow ; $i++) {
    $sn = $objPHPExcel->getActiveSheet()->getCell('A'.$i)->getValue();
    $pwd = $objPHPExcel->getActiveSheet()->getCell('B'.$i)->getValue();
    $this->Card->create();
    $data = array(
    'sn' => $sn,
    'pwd' => $pwd,
    'good_id' => $id,
    );
    if(!$this->Card->save($data)){
    $this->_err_ret(-6000,'err');
    exit;
    }
    }
    $newNumber = (int)$this->Good->findById($id)['Good']['number']+(int)$highestRow-1;
    $this->Good->id = $id;
    if(!$this->Good->saveField('number',$newNumber)){
    $this->_err_ret(-6000,'err');
    }
    $this->_suc_ret($id);
    }

PHPExcel实现上传excel文件导入数据库的更多相关文章

  1. jQuery+php+ajax+PHPExcel实现上传excel文件导入数据库

            项目中需要批量导入数据,感觉这个需求以后也会经常用,必须总结分享下: 引入jquery的第三方表单插件: <scripttype="text/javascript&qu ...

  2. java上传excel文件及解析

      java上传excel文件及解析 CreateTime--2018年3月5日16:25:14 Author:Marydon 一.准备工作 1.1 文件上传插件:swfupload: 1.2 文件上 ...

  3. Django框架(上传Excel文件并读取)

    博主今天整理下Django框架中上传Excel文件并读取 博主是要在管理平台中新增用例的维护功能,想着通过上传Excel文件来展示用例,下面是项目的路径图: 首先先建数据库模型 model.py 可以 ...

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

  5. js上传Excel文件

    一.问题 需要在项目里添加一个上传excel文件的功能,因为其他同样的后台里面有上传文件的功能,第一反应就是想着直接用.了解了一下发现它是利用bootstrap的fileinput实现的,但是我怎么都 ...

  6. 使用phpExcel批量上传excel表数据到mysql数据库中

    /*批量上传数据*/ if(isset($_POST['submit']) && $_POST['submit']=='上传文件') { //导入类文件 require_once (& ...

  7. 基于Spring MVC实现基于form表单上传Excel文件,批量导入数据

    在pom.xml中引入: <!--处理2003 excel--> <dependency> <groupId>org.apache.poi</groupId& ...

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

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

  9. jmert中如何测试上传文件接口(测试上传excel文件)

    第一次用jmeter这个工具测试上传接口,以前没做过这一块,导致走了很多弯路.特地把经验谢谢,怕自己以后忘记... 一,jmeter如何上传文件 jmeter 的 http requests post ...

随机推荐

  1. GitExtensions工具安装与配置

    GitExtensions工具使用教程 第一步:安装 1.双击:GitExtensions24703SetupComplete.msi <ignore_js_op>  <ignore ...

  2. C# Type.GetConstructor() 根据构造函数参数获取实例对象(一)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  3. OpenCv中基本数据类型--Point,Size,Rect,Scalar,Vec3b类类型的详细解释

    头文件路径:opencv-2.4.9/modules/core/include/opencv2/core/core.hpp 一.Point类 在这些数据类型中,最简单的就是Point点类,Point类 ...

  4. 李洪强iOS开发之基于彻底解耦合的实验性iOS架构

    基于彻底解耦合的实验性iOS架构   这周我决定做一个关于彻底解耦合的应用架构的实验.我想探究的主题是: “如果所有的应用内通讯都通过一个事件流来完成会怎么样?” 我构造了一个待办事项应用,因为这是我 ...

  5. python SimpleHTTPServer源码学习

    SimpleHTTPServer.SimpleHTTPRequestHandler继承了BaseHTTPServer.BaseHTTPRequestHandler. 源码中主要实现了BaseHTTPS ...

  6. PyCharm创建文件时自动添加头注释

    进入设置 File->settings->Editor->File and Code Templates->Python Script 添加以下代码: #!/usr/bin/e ...

  7. text-encoding正确使用姿势

    蓝牙打印,需要转字符串为gb2312到uint8array.果断使用了一把text-encoding,始终不对. https://github.com/inexorabletash/text-enco ...

  8. golang解析xml

    解析xml标签或者html标签,都是xml文档格式.要是返回的html标签,可以用第三方依赖库goquery来解析. 下面说下,解析xml标签的格式.直接上代码,代码如下: package main ...

  9. 前端webview开发中遇到的一些问题及其解决方法

    最近做了一个webview中的兑换页面,本来以为很简单,想不到遇到了远远超出预期数量的BUG,记下来,以备后患. 1 inline-block元素折行 BUG描述:现在我有三个DIV,要在一列等宽排列 ...

  10. 集合Map映射(使用xml文件)

    Hibernate允许我们将Map元素与RDBMS进行映射. 我们知道,List和Map是基于索引的集合. 在map的情况下,索引列作为键,元素列用作值. 使用xml文件在集合映射中映射Map的示例 ...