基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据
废话不多说,直接给大家贴代码了,代码附有注释,相信大家都能看懂的,有不明白的地方欢迎给我留言。
前端HTML+JQuery 备注Jquery需要1.x版本,不能用2.x版本
1.引入必要文件及上传input
<loadfile="__PUBLIC__/js/jquery-1.11.3.min.js"/> <loadfile="__PUBLIC__/uploadify/jquery.uploadify.min.js"/> <loadfile="__PUBLIC__/uploadify/uploadify.css"/> <inputtype="file"class=""id="student"name="student">
2.uploadify使用操作
<script>
$(function(){
//ThinkPHP上传地址
varupload="{:U(MODULE_NAME.'/Student/upload')}";
//ThinkPHPsessionID的提交变量
//'VAR_SESSION_ID'=>'session_id',在ThinkPHP/Conf/convention.php中进行配置,默认关闭的需要开启
varsid='{:session_id()}';
//导入数据地址
vardaoruUrl="{:U(MODULE_NAME.'/Student/daoruHandle')}"
//Amazeui模态框
varmodal=$('#my-modal-loading');
//uploadify使用方法
$('#student').uploadify({
'swf':'__PUBLIC__/uploadify/uploadify.swf',
'uploader':upload,
'buttonText':'选择文件...',
'width':120,
'height':30,
'formData':{'session_id':sid},
'fileTypeExts':'*.xls',
//开始上传弹出模态框
'onUploadStart':function(file){
$('#alert-content').html('正在上传文件');
modal.modal();
},
//上传成功关闭模态框,并用后台函数导入数据
'onUploadSuccess':function(file,data,response){
$('#alert-content').html('正在导入数据');
data=eval("("+data+")");
$.ajax({
type:'POST',
url:daoruUrl,
data:{'file':data.file},
success:function(retdata){
modal.modal('close');
if(retdata==1){
alert('导入成功');
}else{
alert('导入失败');
}
},
dataType:'json'
});
}
});
});
</script>
3、ThinkPHP控制器上传操作:备注需要引入Upload.class.php空间
functionupload(){
$config=array(
'maxSize'=>3145728,
'rootPath'=>'./Uploads/',
'savePath'=>'',
'saveName'=>array('uniqid',''),
'exts'=>array('xls'),
'autoSub'=>true,
'subName'=>array('date','Ymd'),
);
$upload=newUpload($config);
//上传文件
$info=$upload->upload();
if(!$info){//上传错误提示错误信息
$this->error($upload->getError());
}else{//上传成功获取上传文件信息
$file=$info['Filedata']['savepath'].$info['Filedata']['savename'];
}
//p($info);
$data=array(
'file'=>'./Uploads/'.$file,
);
echojson_encode($data);
}
4.导入数据进去mysql
//导入数据处理
functiondaoruHandle(){
$file=I('file');
$excelData=excel_to_mysql($file);
foreach($excelData['data']as$row){
$data=array(
'xuehao'=>$row['xuehao'],
'xingming'=>$row['xingming'],
'xingbie'=>($row['xingbie']=='男')?1:0,
'mima'=>md5($row['mima']),
);
M('student')->add($data);
}
echo1;
}
5.PHPExcel读取Excel文件返回数据函数
functionexcel_to_mysql($file){
//导入PHPExcel第三方类库
//vendor('PHPExcel.PHPExcel');
import('Classes.PHPExcel',COMMON_PATH,'.php');
//实例化PHPExcel类,用于接收Excel文件
$PHPExcel=newPHPExcel();
//读取Excel文件类实例化
$PHPReader=newPHPExcel_reader_Excel5();
//检测Excel版本是否可读
if(!$PHPReader->canRead($file)){
$PHPReader=newPHPExcel_Reader_Excel2007();
if(!$PHPReader->canRead($file))returnarray('error'=>1);//未知版本的Excel
}
//读取Excel文件
$PHPExcel=$PHPReader->load($file);
//获得Excel中表的数量
$sheetCount=$PHPExcel->getSheetCount();
//获得第一张工作表
$sheet=$PHPExcel->getSheet(0);
//获得表中最大数据列名
$column=$sheet->getHighestColumn();
//获得表中最大数据行名
$row=$sheet->getHighestRow();
//循环获得表中数据
for($i=1;$i<=$row;$i++){
$data[]=array(
//通过工作表对象的getCell方法获得单元格getValue方法获得该单元格数值
'xuehao'=>$sheet->getCell('A'.$i)->getValue(),
'xingming'=>$sheet->getCell('B'.$i)->getValue(),
'xingbie'=>$sheet->getCell('C'.$i)->getValue(),
'mima'=>$sheet->getCell('D'.$i)->getValue(),
);
}
//释放工作表对象
unset($sheet);
//释放读取Excel文件对象
unset($PHPReader);
//释放Excel文件对象
unset($PHPExcel);
//返回数据
returnarray('error'=>0,'data'=>$data);
}
通过以上代码实现了ThinkPHP+uploadify+upload+PHPExcel无刷新导入数据,希望对大家有所帮助。