使用Yii2 PHPExcle导入、导出Excel的方法
在使用Yii2进行导入导出时候遇到了一些问题这里汇总一下,使用composer的方法安装,网上的方法很详细,这里就不再叙述了,这里提供一些demo
导入
在导入时候首先遇到的问题就是不能使用表单的方式提交文件,不然表单在提交后会自动刷新页面,这里需要使用 fromData
view
<div class="importFile"> 导入
//这里的ID目的是为css配置样式,name是js取到这个模块的名称
<input id="importExcel" name="importExcel" type="file" />
</div>
js
documentInit: function() {
//点击事件
$('#importExcel').on('change', function(){
_this.importExcel();
});
importExcel: function(){
var _this = this;
//这里需要使用formData将excle实例送到后台
var formData = new FormData();
formData.append("importFile", $('#importFile')[0].files[0]);
$.ajax({
url: '|yiicontroller的地址|',
//禁止对文件进行序列化处理
processData:false,
contentType:false,
//上面两行特别重要哦
dataType: 'json',
cache: false,
data: formData,
type: 'POST',
}).done(function(resp) {
if (resp.result == 'ok') {
//Do What You Want
}
}
console.log("导入成功");
} else {
console.log(resp.msg);
}
}).error(function(e) {
console.log(e+"服务器出错,请稍后再试")
});
}
}
controller
public function actionImportExcel(){
//这里同样还是试用$_FILES来接受文件
if (Yii::$app->request->isPost && isset($_FILES['importFile']['tmp_name'])) {
$objectphpExcle =new \moonland\phpexcel\Excel;//这里是我Excle的位置
try{
$datas = $objectphpExcle->import($_FILES['importFile']['tmp_name']);
} catch (\Exception $e) {
return $this->ajaxResponse($e->getMessage(), 'error');
}
//处理的你的数据
return $this->ajaxResponse($re, "ok");
}
return $this->ajaxResponse("文件上传失败或没有找到", "notFound");
}
这样做的好处是只能将excle放在服务器的临时位置读取数据,是使用完毕后删除掉
导出
导出有一个非常坑的点就是使用phpExcle的同时不能使用ajax,原因是同时试用了header会造成冲突,这里也没有使用ajax就没有解决,有兴趣解决了的朋友可以讨论一下还是上代码
view
//这个@click链接了我的js
<button class="btn btn-red" type="button" @click="exportExcel">导出</button>
js
exportExcel: function(){
var _this = this;
window.location.href='/sale/sku-stock/export-excel?isSep='+_this.isSep }
controller
public function actionExportExcel($isSep=0){
$modeData = "";
$columnsData ="";
$headersData = "";
$objectPHPExcel=new \moonland\phpexcel\Excel;
$objectPHPExcel->export([
'fileName'=> 'fileName',
'asAttachment' => true,
'models'=>$modeData,
'columns'=>$columnsData,
'headers'=>$headersData,
]);
}
这个导出的方法需要整理号columns headers 和models 就不用网上其他传统的一行一行设置一行一行配置,节省了大多数的代码
github: https://github.com/XxYyKk/PHPExcel/tree/1.8/Examples