在系统开发中提升 Excel 数据导出一致性与可维护性的统一规范与最佳实践

背景:

在系统开发过程中,数据导出为 Excel 格式是一个常见的需求。然而,由于各个开发人员的编码习惯和实现方式不同,导致导出代码风格不一。有的人使用第三方库,有的人则自定义实现。这种多样化不仅影响了代码的一致性,也降低了可读性,如下图所示,给后续的维护和协作带来了很大不便。为了提升代码的规范性和可维护性,我们亟需制定统一的 Excel 导出规范和最佳实践。

 

 

 经过优化整理,和参考网上其他作者写的文章,归纳了一下较为简洁的代码。如下所示

public void exportListCommon(HttpServletResponse response, CanHistoryDataReqVO reqVO) throws IOException {
        String[] columnsTitle = null;
        // 填充数据行
        String[][] data = null;
        HashMap<String, Object> hashMap = getList(new Page().setSize(-1),reqVO);
        if(hashMap!=null){
           List<Map<String,Object>> tempTitleList = (List<Map<String, Object>>) hashMap.get("title");
            List<HashMap<String, Object>> tempValueList =((IPage<HashMap<String, Object>>)hashMap.get("historyDataList")).getRecords();
            //定义标题长度
            columnsTitle = new String[tempTitleList.size()];
            //定义数据长度 new String[数据长度][标题长度];
            data = new String[tempValueList.size()][tempTitleList.size()];
            for(int i  = 0 ; i<tempTitleList.size();++i){
                //标题名赋值
                columnsTitle[i] = (String) tempTitleList.get(i).get("paramsValue");
            }
            //给数据赋值,跟列表头一一对应
            for (int j = 0 ; j <tempValueList.size();++j){
                for (int k = 0 ; k <tempTitleList.size(); ++k){
                    data[j][k]= tempValueList.get(j).get(tempTitleList.get(k).get("paramsKey")).toString();
                }

            }

        }
        ExcelUtil.export("CanHistory",response,columnsTitle,data);
    }

 动态导出execl数据,这段代码,方便和简洁,适合长期保存使用。

/**
     * 动态导出execl数据
     * @param response
     * @param columnsTitle
     * @param data
     * @throws IOException
     */
    public static void export(String fileName,HttpServletResponse response, String[] columnsTitle, String[][] data) throws IOException {
        // 设置响应类型
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setHeader("Content-Disposition", "attachment; filename="+fileName+".xlsx");
        // 创建工作簿
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet(fileName);

        // 设置标题行
        Row headerRow = sheet.createRow(0);
        for (int i = 0; i < columnsTitle.length; i++) {
            Cell cell = headerRow.createCell(i);
            cell.setCellValue(columnsTitle[i]);
        }
        // 填充数据行
        for (int i = 0; i < data.length; i++) {
            Row dataRow = sheet.createRow(i + 1);
            for (int j = 0; j < data[i].length; j++) {
                Cell cell = dataRow.createCell(j);
                cell.setCellValue(data[i][j]);
            }
        }
        // 将工作簿写入响应输出流
        workbook.write(response.getOutputStream());
        workbook.close();
    }

 测试样例:

 

 

 效果:

觉得写的不错的朋友,请点点赞!❤❤❤❤❤❤❤❤ 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值