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模板




