导出/下载EXCEL

本文档详细描述了Controller中如何通过POST请求批量导出Excel的功能,涉及参数验证、Service层的接口定义及ServiceImpl中具体的数据处理和文件生成过程。重点展示了如何使用XSSFWorkbook创建Excel,以及数据填充和文件输出的细节。
摘要由CSDN通过智能技术生成

controller:

	/**
     * 批量导出Excel
     *
     * @param response response
     * @param sddIdDTO sddIdDTO
     */
    @PostMapping("/export/sddDetail")
    @WoAddUser
    @WoAuditLog(value = AuditLogTypeConstant.QUERY)
    public void exportSddDetail(HttpServletResponse response, @RequestBody @Validated SddIdBody sddIdDTO) {
        iSddDataManagementService.exportSddDetail(response, sddIdDTO);
    }

service:

/**
     * 批量导出Sdd Excel
     *
     * @param response response
     * @param sddIdDTO sddIdDTO
     */
    void exportSddDetail(HttpServletResponse response, SddIdBody sddIdDTO);

serviceImpl:

/**
     * 批量导出Sdd Excel
     *
     * @param response response
     * @param sddIdDTO sddIdDTO
     */
    @Override
    public void exportSddDetail(HttpServletResponse response, SddIdBody sddIdDTO) {
        List<String> sddIds = sddIdDTO.getSddIdList();
        String serviceInstanceId = sddIdDTO.getServiceInstanceId();
        // 限制导出1000条
        int count = sddDataManageMapper.selectCountSdd(sddIds, serviceInstanceId);
        if (count > 1000) {
            throw new CommonException(StatusCode.EXCEL_EXPORTED_IS_Limitations);
        }
        List<DataDevSddVO> dataDevSddVOS = sddDataManageMapper.selectTaskStatusAndInstanceId(sddIds, serviceInstanceId);
        if (dataDevSddVOS == null || dataDevSddVOS.isEmpty()) {
            throw new CommonException(StatusCode.EXCEL_EXPORT_NO_DATA);
        }
        OutputStream outputStream = null;
        // 创建Excel
         XSSFWorkbook xssfWorkbook = new XSSFWorkbook();
        exportTaskDataUtil.buildSddExcel(xssfWorkbook, dataDevSddVOS, sddIdDTO.getLanguage());
        LOG.info("buildSddExcel {}",  "buildSddExcel");
        try {
            response.setContentType("application/vnd.ms-excel");
            response.setCharacterEncoding("UTF-8");
            response.addHeader("Content-Disposition", "attachment;filename=sdd.xlsx");
            response.flushBuffer();
            outputStream = response.getOutputStream();
            xssfWorkbook.write(outputStream);
        } catch (IOException e) {
            LOG.error("exportTaskDetail export excel failed IOException {}",
                ParamCheck.checkLoggerPrint(e.getMessage()));
        } finally {
            CommonUtils.close(outputStream);
            CommonUtils.close(xssfWorkbook);
        }
    }






/**
     * buildSddExcel
     *
     * @param xssfWorkbook xssfWorkbook
     * @param dataDevSddVOS dataDevSddVOS
     * @param language language
     * @return void
     */
    public void buildSddExcel(XSSFWorkbook xssfWorkbook, List<DataDevSddVO> dataDevSddVOS, String language) {
        // 创建Sheet
        XSSFSheet sddSheet = xssfWorkbook.createSheet(ExcelConstant.EXCEL_SHEET_NAME_SDDSHEET);
        createSddSheetBaseColumn(sddSheet, language);
 
        // sheet构建
        buildSddSheet(sddSheet, dataDevSddVOS, language);
    }




private void buildSddSheet(XSSFSheet sddSheet, List<DataDevSddVO> dataDevSddVOS, String language) {
        LOG.info("start buildSddSheet");
        // 行塞值
        for (int index = NumbersKey.ZERO; index < dataDevSddVOS.size(); index++) {
            DataDevSddVO dataDevSddVO = dataDevSddVOS.get(index);
            XSSFRow dataRow = sddSheet.createRow(index + NumbersKey.ONE);
            getSddData(dataRow, dataDevSddVO, language);
        }
        LOG.info("end buildSddSheet");
    }



private void createSddSheetBaseColumn(XSSFSheet sheet, String language) {
        String[] column = null;
        if (EN.equals(language)) {
            column = excelConfig.getSddColumnEn();
        } else {
            column = excelConfig.getSddColumn();
        }
        // 创建标题
        XSSFRow row = sheet.createRow(NumbersKey.ZERO);
        for (int index = NumbersKey.ZERO; index < column.length; index++) {
            XSSFCell cell = row.createCell(index);
            cell.setCellValue(column[index]);
        }
    }



private void getSddData(XSSFRow dataRow, DataDevSddVO dataDevSddVO, String language) {
        dataRow.createCell(NumbersKey.ZERO)
            .setCellValue(ExcelInjectFilter.filterExcelCellData(dataDevSddVO.getSddId()));
        dataRow.createCell(NumbersKey.ONE).setCellValue(ExcelInjectFilter.filterExcelCellData(dataDevSddVO.getTitle()));
        dataRow.createCell(NumbersKey.TWO)
            .setCellValue(ExcelInjectFilter.filterExcelCellData(dataDevSddVO.getDescription()));
        dataRow.createCell(NumbersKey.THREE)
            .setCellValue(ExcelInjectFilter.filterExcelCellData(dataDevSddVO.getCreated()));
        dataRow.createCell(NumbersKey.FOUR)
            .setCellValue(ExcelInjectFilter.filterExcelCellData(dataDevSddVO.getEstimatedWorkload()));
        dataRow.createCell(NumbersKey.FIVE)
            .setCellValue(SddPriorityEnmu.changeSddImpetence(dataDevSddVO.getUrgency(), language));
		dataRow.createCell(NumbersKey.SIX)
            .setCellValue(ExcelInjectFilter.filterExcelCellData(
                null == dataDevSddVO.getPlannedDate() ? "" : DateUtil.formatDate(dataDevSddVO.getPlannedDate())));
        dataRow.createCell(NumbersKey.SEVEN)
            .setCellValue(ExcelInjectFilter.filterExcelCellData(
                null == dataDevSddVO.getCreateTime() ? "" : DateUtil.formatDate(dataDevSddVO.getCreateTime())));
        dataRow.createCell(NumbersKey.EIGHT)
            .setCellValue(ExcelInjectFilter.filterExcelCellData(dataDevSddVO.getOwner()));
        dataRow.createCell(NumbersKey.NINE)
            .setCellValue(SddPriorityEnmu.changeSddStatus(dataDevSddVO.getTaskWorkStatus(), language));
    }
}



public static String changeSddImpetence(String impetence, String language) {
 
        if (EN.equals(language)) {
            switch (impetence) {
                case "0":
                    return "Very urgent.";
                case "1":
                    return "Urgent";
                case "2":
                    return "Common";
                case "3":
                    return "General";
            }
            return "Very urgent.";
        }else {
            switch (impetence) {
                case "0":
                    return "非常紧急";
                case "1":
                    return "紧急";
                case "2":
                    return "普通";
                case "3":
                    return "一般";
            }
            return "非常紧急";
        }
    }
前端导出Excel下载可以通过以下步骤实现。首先,你需要准备一个Excel模板,可以使用HTML表格来创建模板。在模板中,你可以使用表格标签来定义Excel的结构和内容。\[1\]然后,在封装请求时,需要设置responseType为"blob",以确保返回的数据类型是二进制流。\[2\]接下来,你可以使用JavaScript来触发导出操作。可以在按钮的点击事件中调用一个函数,该函数将表格数据转换为Excel格式并触发下载操作。\[3\]在这个函数中,你可以使用JSON数据来填充Excel表格的内容。最后,将生成的Excel文件提供给用户进行下载。 #### 引用[.reference_title] - *1* *3* [前后端导出/下载excel方法](https://blog.csdn.net/snsHL9db69ccu1aIKl9r/article/details/93377280)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [前端实现导出下载excel文件(Blob数据类型)](https://blog.csdn.net/G_ing/article/details/128170853)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值