跟正常的导出一样,只是需要指定上参数,根据是上一篇文章可以获取到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();
本文来自博客园,作者:哈利波特甜,转载请注明原文链接:https://www.cnblogs.com/zmh-980509/p/15792425.html
分类:
工作
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本