EasyExcel选择导出

发布时间 2023-03-31 19:44:58作者: 小贤看世界

选择指定的数据easyexcel导出

前端vue

<el-table
          :data="tableData"
          style="width: 100%"
          @selection-change="selectionChange"
      >
        <el-table-column
            type="selection"
            width="55"
            align="center"
        >
        </el-table-column>

        <el-table-column
            width="150px"
            label="序号"
            align="center"
            prop="id"
        />
        <el-table-column
            align="center"
            width="200px"
            label="订单编号"
            prop="orderId"
        />
        <el-table-column
            align="center"
            width="150px"
            label="订单类型"
            prop="orderType"
        />
        <el-table-column
            width="150px"
            align="center"
            label="订单动作"
            prop="orderActions"
        />
        <el-table-column
            width="150px"
            align="center"
            label="业务类型"
            prop="businessType"
        />
        <el-table-column
            width="150px"
            align="center"
            label="支付方式"
            prop="paymentMethods"
        />
        <el-table-column
            width="150px"
            align="center"
            label="配送方式"
            prop="shippingMethods"
        />
        <el-table-column
            width="150px"
            align="center"
            label="订单状态"
            prop="orderStatus"
        >
          <template v-slot="obj">
            <el-tag v-if="obj.row.orderStatus==='待出库'" type="warning">待出库</el-tag>
            <el-tag v-if="obj.row.orderStatus==='已出库'" type="info">已出库</el-tag>
            <el-tag v-if="obj.row.orderStatus==='已发货'" type="primary">已发货</el-tag>
            <el-tag v-if="obj.row.orderStatus==='已到货'" type="success">已到货</el-tag>
          </template>
        </el-table-column>

        <el-table-column
            align="center"
            label="操作"
        >
          <template v-slot="obj">
            <el-button type="primary" size="mini"
                       @click="showDetail(obj.row);detailDialogVisible = true">查看
            </el-button>
            <el-button type="success" icon="el-icon-s-promotion"
                       @click="outbound(obj.row)" size="mini">生成销售出库单
            </el-button>

          </template>
        </el-table-column>
      </el-table>
      <!--表单数据-->

前端js传值

 methods: {
        selectionChange(obj){
            console.log(obj)
            this.params = obj;

        },
       async exportExcel(){
            this.$axios({
                url:'http://localhost:8088/sales/sales-order/export2',
                method:'post',
                data:this.params,
                responseType: 'blob'
                // responseType: 'arraybuffer'
            }).then(res=>{
                //生成一个a链接
                const link = document.createElement("a");
                //将后端返回的数据封装为blob
                let blob = new Blob([res.data], { type: "multipary/form-data" });
                link.style.display = "none";
                //将返回的数据生成url赋值给a链接
                link.href = URL.createObjectURL(blob);
                link.setAttribute("download", decodeURI('订单详情.xlsx'));
                document.body.appendChild(link);
                link.click();
                // 下载完成移除元素
                document.body.removeChild(link);
                //下载后释放url对象
                window.URL.revokeObjectURL(link.href);
                console.log(res);
            })
        }
    }

后端controller中

  
@RestController
@RequestMapping("/sales/sales-order")
@Slf4j
public class SalesOrderController {
/**
     * 选择导出
     * @param params
     * @return
     * @throws IOException
     */
    @RequestMapping("export2")
    public void writeExcel2(HttpServletResponse response,@RequestBody List<SalesOrder> params) throws IOException {
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");
        //防止中文乱码
        String fileName = URLEncoder.encode("订单信息","UTF-8");
        response.setHeader("Content-Disposition","attachment;filename*=UTF-8''"+fileName+".xlsx");

        ServletOutputStream outputStream = response.getOutputStream();

        //工作簿对象
        ExcelWriterBuilder writeWorkBook = EasyExcel.write(outputStream,SalesOrder.class);
        //工作表对象
        ExcelWriterSheetBuilder sheet = writeWorkBook.sheet();
        //准备数据

        //
        sheet.doWrite(params);
    }
}