当前位置:首页>>问题

php+js实现上传excel文件批量添加到数据表功能

1、首先引入xlsx.core.min.js文件,下载后,去掉.rar后缀xlsx.core.min.js.rar2、js部分解析excel文件,获取里面的内容,将内容发送给php后端<scripttype="text/javascript"src="/Public/static/js/xlsx.core.min.js"></script><inputtype="file" 

admin

1、首先引入xlsx.core.min.js文件,下载后,去掉.rar后缀

xlsx.core.min.js.rar

2、js部分解析excel文件,获取里面的内容,将内容发送给php后端

<script type="text/javascript" src="/Public/static/js/xlsx.core.min.js"></script>

<input type="file" id="excel-file">

<script>
    $('#excel-file').change(function (e) {
      var files = e.target.files;
    
      var fileReader = new FileReader();
      fileReader.onload = function (ev) {
        try {
          var data = ev.target.result,
            workbook = XLSX.read(data, {
              type: 'binary'
            }), // 以二进制流方式读取得到整份excel表格对象
            persons = []; // 存储获取到的数据
        } catch (e) {
          console.log('文件类型不正确');
          return;
        }
    
        // 表格的表格范围,可用于判断表头是否数量是否正确
        var fromTo = '';
        // 遍历每张表读取
        for (var sheet in workbook.Sheets) {
          if (workbook.Sheets.hasOwnProperty(sheet)) {
            fromTo = workbook.Sheets[sheet]['!ref'];
            console.log(fromTo);
            persons = persons.concat(XLSX.utils.sheet_to_json(workbook.Sheets[sheet]));
            // break; // 如果只取第一张表,就取消注释这行
          }
        }
    
        console.log(persons);
         postData(persons)
        //清空表格
        /*  $(".tablehead").html("");
         $(".tablebody").html("");
         for (var j = 0; j < persons.length; j++) {
           var arr = persons[j];
           if (j == 0) {
             $(".tablehead").append("<tr class='exceltitle'></tr>");
           }
           $(".tablebody").append("<tr class='excelcontent'></tr>");
           for (var i in arr) {
             //alert(i+"---"+arr[i]);
             if (j == 0) {
               $(".exceltitle").append("<th>" + i + "</th>");
             }
             $(".excelcontent").eq(j).append("<td>" + arr[i] + "</td>");
           }
         } */
      };
      // 以二进制方式打开文件
      fileReader.readAsBinaryString(files[0]);
    });
    
function postData(params) {
//var sysId = sessionStorage.getItem("sysId") || 7
//sysId= numToCharId(sysId)
//var apiUrl= sessionStorage.getItem("apiUrl") || '//zsapi.i-active.cn/api/'
  console.log('params: ', params);
  $.ajax({
    type: 'POST',
    url: '<?php echo U('GiftVote/excel_up'); ?>',
    data: {
      sysid: '1',
      userid: '1',
      pid: '<?php echo $_GET@['id'];?>',
      excels: JSON.stringify(params)
    },
    //data: JSON.stringify(params), // 将数组转换为 JSON 字符串
    dataType: 'json',
    //contentType: 'application/json', // 关键:声明发送的是 JSON 数据
    success: function (res) {
      console.log('res',res);
      if (res == 1) {
	    //layer.msg("导入"+res.data.length +"选手成功!");
	    layer.msg("导入选手成功!");
        console.log(res.data)
		setTimeout(function(){
 		 window.location.href ='/admin.php?m=System&c=GiftVote&a=item&id=<?php echo $_GET@['id'];?>'
		}, 800);
		 
      } else {
         layer.msg("导入选手失败!");
      }

    },
    error: function (err) {
      alert('接口错误!!!')
      console.log('err: ' + err.status)
    }
  })
}
    
</script>

3、php后端接收参数,将数据直接写入数据表,实现上传excel文件批量添加功能

    //excel批量添加选手
    public function excel_up(){
        
        $pid = I('pid');
        $user_id = I('userid');
        $jsonData = $_POST@['excels'];
        //$jsonData = file_get_contents('php://input');
        //echo gettype($jsonData);
        //print_r($jsonData);die;
        if(empty($jsonData)){
            $this->error('请提交excel数据');
        }
        // 解析JSON
        $data = json_decode($jsonData, true);
        
        if(json_last_error() !== JSON_ERROR_NONE){
            //echo "JSON Error: " . json_last_error_msg(); // 打印具体错误(如 "Syntax error")
            $this->error('JSON格式错误');
        }
        // 给每条数据添加额外参数
        foreach($data as $k1 => $v1) {
            $data[$k1]['user_id'] = $user_id;
            $data[$k1]['pid'] = $pid;
            $data[$k1]['createtime'] = time(); // 可以添加创建时间 
        }
        //print_r($data);die;
        
        // 批量添加
        $result = D('giftvote_item')->addAll($data);
        
        if($result) {
            //$this->success('批量添加成功,共添加'.$result.'条记录');
            echo 1;
        } else {
            //$this->error('批量添加失败:'.D('giftvote_item')->getError());
            echo 0;
        }

    }

4、excel模板

1754696571214531.png



返回顶部