java导出excel,数据导出

本文介绍了如何在Java中操作,通过Controller层和服务层的配合,实现数据的导出功能,重点在于处理Excel的生成与下载。使用Postman进行接口测试,展示了实际的导出效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Controller层

   /**
     * 导出excel
     */
    @RequestMapping(value = "/loadExcel", method = RequestMethod.POST)
    public void loadExcel(HttpServletResponse response) {
           mallService.loadFlowsExcel(response);
    }

Service层

public void loadFlowsExcel(HttpServletResponse response) {
        //导出自己需要的数据列表  MallOrderDTO 类是我自己用的
        List<MallOrderDTO> list = mallDao.getOrders(mallOrderDTO);
        try {
            HSSFWorkbook wb = new HSSFWorkbook();//创建HSSFWorkbook对象
            HSSFSheet sheet = wb.createSheet("订单列表");//建立sheet对象
            HSSFRow row1 = sheet.createRow(0); //在sheet里创建第一行,参数为行索引
            HSSFCell cell = row1.createCell(0); //创建单元格
            //标题
            cell.setCellValue("订单列表");//设置单元格内容
            CellStyle titleStyle = setHeaderStyle(wb);//设置单元格样式
            cell.setCellStyle(titleStyle);

            //合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列
            sheet.addMergedRegion(new CellRangeAddress(0, 2, 0, 11));

            /*------------导出excel的列名--------------*/
            String[] cellValueArr = {"订单ID", "商城名称", "商品名称", "订单价格(元)", "订单时间", "商品数量", "买家", "手机", "发货地址", "运费", "订单状态","付款状态"};

            HSSFRow row2 = sheet.createRow(3);
            //创建单元格并设置单元格,设置单元格的长度和格式
            for (int i = 0; i < cellValueArr.length; i++) {
                if (i == 2) {
                    sheet.setColumnWidth(i, 15 * 256 * 2);
                } else if (i == 4) {
                    sheet.setColumnWidth(i, 15 * 256 * 2);
                } else if (i == 8) {
                    sheet.setColumnWidth(i, 15 * 256 * 2);
                } else {
                    sheet.setColumnWidth(i, 15 * 256);
                }
                Cell headerCell = row2.createCell(i);
                headerCell.setCellValue(cellValueArr[i]);
                CellStyle cellStyle = setCellStyle(wb, i);
                headerCell.setCellStyle(cellStyle);
            }
            //设置长短
          /*  sheet.setColumnWidth(9, 15 * 256);
            sheet.setColumnWidth(10, 15 * 256);*/

            //初始位置  数据出现的位置
            int one = 5;
            //查询列表数据
            if (!CollectionUtils.isEmpty(list)) {
                int size = list.size();
                //在sheet里创建第三行
                MallOrderDTO excel;
                for (int i = 0; i < size; i++) {
                    HSSFRow row3 = sheet.createRow(i + one - 1);
                    excel = list.get(i);
                    String value;
                    for (int j = 0; j < cellValueArr.length; j++) {
                        Cell cell2 = row3.createCell(j);
                        //给当前单元格赋值  judgementValue 方法在下面
                        value = judgementValue(excel, j);
                        cell2.setCellValue(value);
                        CellStyle cellStyle = setCellStyle(wb, j);
                        cell2.setCellStyle(cellStyle);
                    }
                }
            }
            // 将文件存到指定位置
            OutputStream output = response.getOutputStream();
            response.reset();
            response.setContentType("application/vnd.ms-excel");
            response.setHeader("Access-Control-Allow-Origin", "*");
            //文件名这里可以改,注意保存格式为.xls
            String exportFileName = "订单列表" + CommonUtil.getSimpleDateString() + ".xls";
            String fileNameURL = URLEncoder.encode(exportFileName, "UTF-8");
            response.setHeader("Content-disposition", "attachment;filename=" + fileNameURL + ";" + "filename*=utf-8''" + fileNameURL);
            response.setContentType("application/vnd.ms-excel");

            wb.write(output);
            output.close();
        } catch (Exception e) {
            e.printStackTrace();
        }


    }

  /**
     * 设置表头样式
     *
     * @param workbook
     * @return
     */
    private CellStyle setHeaderStyle(Workbook workbook) {
        CellStyle cellStyle = workbook.createCellStyle();
        //水平居中
        cellStyle.setAlignment(HorizontalAlignment.CENTER_SELECTION);
        //垂直居中
        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        //设置边框
        cellStyle.setBorderTop(BorderStyle.THIN);
        cellStyle.setBorderRight(BorderStyle.THIN);
        cellStyle.setBorderBottom(BorderStyle.THIN);
        cellStyle.setBorderLeft(BorderStyle.THIN);
        //设置字体
        Font cellFont = workbook.createFont();
        cellFont.setBold(true);
        cellFont.setFontHeightInPoints((short) 18);//设置excel数据字体大小
        cellFont.setFontName("仿宋_GB2312");
        cellStyle.setFont(cellFont);
        return cellStyle;
    }

 /**
     * 设置单元格样式
     */
    private CellStyle setCellStyle(Workbook workbook, int i) {
        CellStyle cellStyle = workbook.createCellStyle();
        //水平居中
        cellStyle.setAlignment(HorizontalAlignment.CENTER_SELECTION);
        //垂直居中
        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        //设置边框
        cellStyle.setBorderTop(BorderStyle.THIN);
        cellStyle.setBorderRight(BorderStyle.THIN);
        cellStyle.setBorderBottom(BorderStyle.THIN);
        cellStyle.setBorderLeft(BorderStyle.THIN);
        //设置字体
        Font cellFont = workbook.createFont();
        cellFont.setFontName("仿宋_GB2312");
        cellStyle.setFont(cellFont);
        return cellStyle;
    }

 /**
     * 放入值   excel列表1
     *
     * @param excel
     * @return
     */
    private String judgementValue(MallOrderDTO excel, int j) {
        String value = "";
        switch (j) {
            case 0:
                //订单Id
                value = StringUtils.isEmpty(excel.getId()) ? "": excel.getId();
                break;
            case 1:
                //商城名称
                value = StringUtils.isEmpty(excel.getStoreName()) ? "" : excel.getStoreName();
                break;
            case 2:
                //商品名称
                value = StringUtils.isEmpty(excel.getGoodsName()) ? "" : excel.getGoodsName();
                break;
            case 3:
                //订单价格
                value = StringUtils.isEmpty(excel.getGoodsPrice()) ? "" : excel.getGoodsPrice();
                break;
            case 4:
                //订单时间
                value = StringUtils.isEmpty(excel.getCreateTime()) ? "" : excel.getCreateTime();
                break;
            case 5:
                //商品数量
                value = StringUtils.isEmpty(excel.getGoodsNumber()) ? "" : excel.getGoodsNumber();
                break;
            case 6:
                //买家
                value = StringUtils.isEmpty(excel.getUserName()) ? "" : excel.getUserName();
                break;
            case 7:
                //手机
                value = StringUtils.isEmpty(excel.getPhone()) ? "" : excel.getPhone();
                break;
            case 8:
                //发货地址
                value = StringUtils.isEmpty(excel.getAddress()) ? "" : excel.getAddress();
                break;
            case 9:
                //运费
                value =excel.getFreight()!=null ? excel.getFreight()+"" :"" ;
                break;
            case 10:
                //订单状态
                value = StringUtils.isEmpty(excel.getStatus()) ? "" : findServiceTypeNew(excel.getStatus());
                break;
            case 11:
                //付款状态
                value = StringUtils.isEmpty(excel.getPayStatus()) ? "" : findServiceTypeNew2(excel.getPayStatus());
                break;
            default:
                value = "";
                break;
        }
        return value;
    }
  //判断订单的状态
    private String findServiceTypeNew(Integer value) {
        switch (value) {
            case 0:
                return "未付款";
            case 1:
                return "未发货";
            case 2:
                return "待收货";
            case 3:
                return "待评论";
            case 4:
                return "退货";
            case 5:
                return "已完成";
            case 6:
                return "订单失效";
            case 7:
                return "订单关闭";
            case 8:
                return "删除订单";
            case 9:
                return "拼团中";
            case 10:
                return "拼团失败";
            case 11:
                return "已退款";
            default:
                return "未知";
        }
    }

    //判断订单的付款状态
    private String findServiceTypeNew2(Integer value) {
        switch (value) {
            case 0:
                return "未付";
            case 1:
                return "已付";
            default:
                return "没有数据";
        }
    }

使用postman测试
在这里插入图片描述

导出效果在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值