Vue导出指定列到excel,返回文件流
跟正常的导出一样,只是需要指定上参数,根据是上一篇文章可以获取到table的表头。将参数传到组件(我用到的是dialog)
dialog title="提示" :visible.sync="dialogVisible" width="30%" :before-close="handleClose"> class="excel-title-cls">for="ct in columnTitle" :key="ct.prop" :span="10"> if="ct.prop != 'index'"> class="btn-check" v-model="ct.checked" border>{{ct.label}} else>class="btn-check" v-model="ct.checked" disabled border>{{ct.label}} "text-align: center; margin-top: 30px">"primary" @click="exportData('check')">导出选中列 class="btn-all" @click="exportData('all')">直接导出 "error" plain @click="handleClose">取消
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();