Vue导出指定列到excel,返回文件流


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



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 includeColumnFiledNames = new HashSet();
                Object list = parmas.get("column");
                for (String o:arr) {
                    includeColumnFiledNames.add(o);
                }
                includeColumnFiledNames.add("pkId");
                List  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();