使用Yii2 PHPExcle +ajax 导入Excle的demo

2 篇文章 0 订阅

使用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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值