java導出excel文件2

0. 使用的jar包:

        <dependency>
            <groupId>com.github.andyczy</groupId>
            <artifactId>java-excel-utils</artifactId>
            <version>4.0</version>
        </dependency>

最終結果: 根據response直接流下載,不會重複生成文件上傳到oss到下載!

 

1.service層下載方法:

@Override
    public void downloadBillExcel(HttpServletResponse response, PageMapperDto mapperDto) {
        try {
            List<OrderBillingPageResponseDto> responseDtoList = crudMapper.findOrderBillingPage(mapperDto);
            log.info("條件查詢賬單:{}", responseDtoList.size());

            String fileName = String.format(OrderBillingConstants.STRING_FORMAT_2, "賬單信息彙總",
                    BankUtils.getCurrentDateTime());
            log.info("準備生成的賬單excel文件名稱:{}", fileName);

            List<String[]> sheetDataList = new ArrayList<>();
            String[] title = Stream
                    .of("訂單編號", "賬單期數", "賬單日期", "承租人姓名", "申請時間", "分公司", "分期金額", "應還本金", "應還利息", "逾期違約金", "逾期違約罰息",
                            "代扣結果", "資方業務狀態", "賬單標記", "賬單狀態", "是否已逾期", "實際還款日期", "已還月租", "已還本金", "已還利息", "已還違約金",
                            "已還罰息", "待還月租", "待還本金", "待還利息", "待還違約金", "待還罰息")
                    .toArray(String[]::new);
            sheetDataList.add(title);

            int size = responseDtoList.size();
            if (CollectionUtils.isNotEmpty(responseDtoList)) {
                for (int i = 0; i < size; i++) {
                    OrderBillingPageResponseDto responseDto = responseDtoList.get(i);
                    sheetDataList.add(orderBillingPageResponseDtoToStringArray(responseDto));
                }
            }
            List<List<String[]>> dataList = new ArrayList<>();
            dataList.add(sheetDataList);

            HashMap<Integer, HashMap<Integer, Integer>> mapColumnWidth = new HashMap<>();
            HashMap<Integer, Integer> mapColumn = new HashMap<>();
            for (int i = 0; i < title.length; i++) {
                if (i == 0 || i == 4 || i == 5) {
                    mapColumn.put(i, 20);
                } else {
                    mapColumn.put(i, 10);
                }
            }
            // 第一個sheet頁單元格列寬
            mapColumnWidth.put(1, mapColumn);

            ExcelUtil.downloadExcel(response, fileName, null, new String[] { "賬單信息" }, dataList, null, mapColumnWidth);
        } catch (Exception e) {
            log.error("Exception:{}", e);
            ExcelUtil.downloadExceptionExcel(response, e);
        }
    }

2. 根據響應對象生成數組的方法orderBillingPageResponseDtoToStringArray:

private String[] orderBillingPageResponseDtoToStringArray(OrderBillingPageResponseDto responseDto) {
        String applyTimeString = StringUtils.EMPTY;
        if (null != responseDto.getApplyTime()) {
            applyTimeString = DateUtils.formatDate(responseDto.getApplyTime(), VehicleConstants.TIANYI_TIME_FORMAT);
        }

        BillStateEnum billStateEnum = BillStateEnum.getEnumByCode(responseDto.getState());
        String billStateString = StringUtils.EMPTY;
        if (billStateEnum != null) {
            billStateString = billStateEnum.getMsg();
        }
        String billFlagString = StringUtils.EMPTY;
        BillFlagEnum billFlagEnum = BillFlagEnum.getEnumByCode(responseDto.getFlag());
        if (billFlagEnum != null) {
            billFlagString = billFlagEnum.getMsg();
        }

        String billStatusString = StringUtils.EMPTY;
        BillStatusEnum billStatusEnum = BillStatusEnum.getEnumByCode(responseDto.getStatus());
        if (billStatusEnum != null) {
            billStatusString = billStatusEnum.getMsg();
        }

        String isOverdueString = StringUtils.EMPTY;
        YesNoEnum yesNoEnum = YesNoEnum.getEnumByCode(responseDto.getIsOverdue());
        if (yesNoEnum != null) {
            isOverdueString = yesNoEnum.getMsg();
        }

        String billRepayDtString = StringUtils.EMPTY;
        if (null != responseDto.getBillRepayDt()) {
            billRepayDtString = DateUtils.formatDate(responseDto.getBillRepayDt(), OrderConstant.TIME_FORMAT);
        }

        String[] result = new String[27];
        result[0] = responseDto.getOrderCode();
        result[1] = String.valueOf(responseDto.getBillPeriod());
        result[2] = DateUtils.formatDate(responseDto.getBillDt(), OrderConstant.TIME_FORMAT);
        result[3] = String.valueOf(responseDto.getUserName());
        result[4] = applyTimeString;
        result[5] = responseDto.getOrganName();
        result[6] = String.valueOf(responseDto.getBillFee());
        result[7] = String.valueOf(responseDto.getBillCapital());
        result[8] = String.valueOf(responseDto.getBillInterest());
        result[9] = String.valueOf(responseDto.getOverdueContractAmt());
        result[10] = String.valueOf(responseDto.getOverduePenalty());
        result[11] = responseDto.getWithholdResult();
        result[12] = billStateString;
        result[13] = billFlagString;
        result[14] = billStatusString;
        result[15] = isOverdueString;
        result[16] = billRepayDtString;
        result[17] = String.valueOf(responseDto.getPaidFee());
        result[18] = String.valueOf(responseDto.getBillCapital().subtract(responseDto.getUnpaidCapital()));
        result[19] = String.valueOf(responseDto.getBillInterest().subtract(responseDto.getUnpaidIntrest()));
        result[20] = String.valueOf(responseDto.getOverdueContractAmt().subtract(responseDto.getUnpaidContractAmt()));
        result[21] = String.valueOf(responseDto.getOverduePenalty().subtract(responseDto.getUnpaidPenalty()));
        result[22] = String.valueOf(responseDto.getUnpaidFee());
        result[23] = String.valueOf(responseDto.getUnpaidCapital());
        result[24] = String.valueOf(responseDto.getUnpaidIntrest());
        result[25] = String.valueOf(responseDto.getUnpaidContractAmt());
        result[26] = String.valueOf(responseDto.getUnpaidPenalty());
        return result;
    }

3.excel的方法:

/**
     * 下載excel - web
     *
     * @param response 請求返回
     * @param fileName 文件名
     * @param labelNameList 標籤名列表
     * @param sheetNameList sheet列表
     * @param dataList 數據
     * @param regionMap 單元格合併
     * @param mapColumnWidth 自定義列寬
     */
    public static void downloadExcel(HttpServletResponse response, String fileName, String[] labelNameList,
                                     String[] sheetNameList, List<List<String[]>> dataList, HashMap regionMap,
                                     HashMap mapColumnWidth) {
        ExcelUtils excelUtils = ExcelUtils.initialization();
        excelUtils.setLabelName(labelNameList);
        excelUtils.setDataLists(dataList);
        excelUtils.setFileName(fileName);
        excelUtils.setResponse(response);
        excelUtils.setSheetName(sheetNameList);
        excelUtils.setRegionMap(regionMap);
        excelUtils.setMapColumnWidth(mapColumnWidth);
        excelUtils.exportForExcelsOptimize();
    }

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章