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" 
1、首先引入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模板