跟正常的导出一样,只是需要指定上参数,根据是上一篇文章可以获取到table的表头。将参数传到组件(我用到的是dialog)

<template>
  <el-dialog
    title="提示"
    :visible.sync="dialogVisible"
    width="30%"
    :before-close="handleClose">
    <div class="excel-title-cls">
      <el-row>
        <el-col v-for="ct in columnTitle" :key="ct.prop" :span="10">
        <span v-if="ct.prop != 'index'">
          <el-checkbox class="btn-check" v-model="ct.checked" border>{{ct.label}}</el-checkbox>
        </span>
          <span v-else>
          <el-checkbox class="btn-check" v-model="ct.checked" disabled border>{{ct.label}}</el-checkbox>
        </span>
        </el-col>
      </el-row>
    </div>
    <div style="text-align: center; margin-top: 30px">
      <el-button type="primary"  @click="exportData('check')">导出选中列</el-button>
      <el-button class="btn-all"  @click="exportData('all')">直接导出</el-button>
      <el-button type="error" plain @click="handleClose">取消</el-button>
    </div>
  </el-dialog>
</template>

<script>
export default {
  name: "exportTcc",
  props: ['dialogVisible','tableData','columnTitle'],
  data() {
    return {
      // dialogVisible: false
    };
  },
  methods: {
    handleClose() {
    },
    exportData(type) {
      let columnTitleNew = []
      let arr =[]
        if (type === 'all'){
          this.$emit('onExport')
          this.$emit('exportDiaClose')
        } else if (type === 'check'){
          this.columnTitle.forEach((item)=> {
            if (item.checked){
              columnTitleNew.push(item)
            }
          })
          if (columnTitleNew.length == 0){
            this.$message({type: 'error',message: '请选择要导出的列'})
            return
          } else {
            // 传递新的数组给后端,调用后端导出接口,这里需要对格式进行转换防止URL无法识别部分编码
            arr = columnTitleNew.map(el =>{
              return el.prop
            })
            this.$emit('onExport',arr)
          }
        }
    },
  }
}
</script>
onExport(arr) {
                let params = {}
                let formInline = this.formInline
                this.getParam(formInline, params)
                var ids = '';
                this.multipleSelection.forEach(function (e) {
                    ids += !ids ? e.id : ',' + e.id;
                })
                if (ids) {
                    params['ids'] = ids
                    params['ids_opt'] = 'in'
                }
                if(arr && arr.length){
                  arr = arr.join(',')
                }else {
                  arr =""
                }
          //因为要传别的参数,就这样拼接了下。 let data
={ ...params, ...{column:arr} } this.listLoading = true exportExcel(data) .then(response => { this.exportDialog = false if (response.data && response.data.size > 100) {
//operateFile是公司写的方法,就不贴了 operateFile(response.data,
params['exportName']) } else { this.$message({ message: '导出失败!', type: 'error' }) } }).catch(error => { this.$message({ message: '导出出错!', type: 'error' }) }) },
                String[] arr = splitStr(parmas.get("column").toString());
                // 根据用户传入字段
                Set<String> includeColumnFiledNames = new HashSet<String>();
                Object list = parmas.get("column");
                for (String o:arr) {
                    includeColumnFiledNames.add(o);
                }
                includeColumnFiledNames.add("pkId");
                List <T> list1 = new ArrayList<>();
                int i = 1;
                    for (T O:result) {
                    T data = new T();
                    data.setPkId(i+"");
                    data.setXxx(O.getXxx());
                    list1.add(data);
                    i++;
                }
                // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
             /*   EasyExcel.write(fileName, TccVo.class).includeColumnFiledNames(includeColumnFiledNames).sheet("停车场信息")
                        .doWrite(list1);*/

                ServletOutputStream out = response.getOutputStream();
                response.setContentType("multipart/form-data");
                response.setCharacterEncoding("utf-8");
                response.setHeader("Content-Disposition", "attachment;filename*=utf-8'zh_cn'" + URLEncoder.encode(fileName, "UTF-8"));
                EasyExcel.write(out, T.class).includeColumnFiledNames(includeColumnFiledNames).autoCloseStream(true).sheet("name")
                        .doWrite(list1);
                out.flush();