欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java poi 导出excel模版

程序员文章站 2024-01-03 21:43:10
...

缘起:应业务需求,提供excel导入的方式保存数据,其实excel导入导出功能很常见,之前也做过很多次,一直忘记记录,写个文章当备份使用

            操作excel的常见两种方式大家应该都知道,jxl 和 poi,我就不做比较了,这里我选用的是Apache POI,因为想支持.xlsx格式的excel版本

            做excel导入之前,想先做一个excel模板导出功能,方便业务使用

            先写了个测试类,导入poi 的jar包,这里我用的3.9版本           

/**
     * Description : 获取出借方案导入excel
     * @return HSSFWorkbook
     */
    public static HSSFWorkbook getLendPlanImportExcel() {
        String[] hssfCellValues = new String[]{"序号", "到期日期(如:20180415)", "计划名称", "收益结算类型", "当前期望收益率单利(不带%号,如:7.34)", "起投金额(单位:元)", "募集总金额(单位:元)", "初始状态", "推荐", "转投购买", "定制购买"};

        //创建Excel工作簿对象
        HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
        //创建Excel的sheet
        HSSFSheet hssfSheet = hssfWorkbook.createSheet("出借计划生成方案导入");
        //设置默认宽度
        hssfSheet.setDefaultColumnWidth(10);
        //设置默认高度
        hssfSheet.setDefaultRowHeightInPoints(15);
        //设置第二列的宽度
        hssfSheet.setColumnWidth(1, 6000);
        //设置第三列的宽度
        hssfSheet.setColumnWidth(2, 6000);
        //设置第五列的宽度
        hssfSheet.setColumnWidth(4, 10000);
        //设置第六列的宽度
        hssfSheet.setColumnWidth(5, 5000);
        //设置第七列的宽度
        hssfSheet.setColumnWidth(6, 5000);


        // 收益结算类型下拉列表数据
        String[] clearingManners = new String[]{"到期支付", "按月支付"};
        // 初始状态下拉列表数据
        String[] states = new String[]{"启用", "禁用"};
        // 初始推荐状态下拉列表数据
        String[] recommendedStates = new String[]{"推荐", "未推荐"};
        // 初始状态下拉列表数据
        String[] isTransfers = new String[]{"可", "不可"};
        // 初始状态下拉列表数据
        String[] isCustomizes = new String[]{"可", "不可"};

        Map<Integer, String[]> map = new HashMap<>();
        map.put(3, clearingManners);
        map.put(7, states);
        map.put(8, recommendedStates);
        map.put(9, isTransfers);
        map.put(10, isCustomizes);

        Set<Map.Entry<Integer, String[]>> set = map.entrySet();
        Iterator<Map.Entry<Integer, String[]>> iterator = set.iterator();
        while (iterator.hasNext()) {
            Map.Entry<Integer, String[]> item = iterator.next();
            // 设置第一列的1-100行为下拉列表
            CellRangeAddressList clearingMannerAddressList = new CellRangeAddressList(1, 99, item.getKey(), item.getKey());
            // 创建下拉列表数据
            DVConstraint clearingMannerConstraint = DVConstraint.createExplicitListConstraint(item.getValue());
            // 绑定
            HSSFDataValidation clearingMannerValidation = new HSSFDataValidation(clearingMannerAddressList, clearingMannerConstraint);
            hssfSheet.addValidationData(clearingMannerValidation);
        }

        //创建一个样式
        HSSFCellStyle hssfCellStyle = hssfWorkbook.createCellStyle();
        // 设置这些样式
        hssfCellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中
        hssfCellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中

        // 背景色
        hssfCellStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
        hssfCellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
        hssfCellStyle.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index);

        // 设置边框
        hssfCellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
        hssfCellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
        hssfCellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
        hssfCellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
        // 自动换行
//        hssfCellStyle.setWrapText(true);

        // 生成一个字体
        HSSFFont font = hssfWorkbook.createFont();
        font.setFontHeightInPoints((short) 11);
        font.setColor(HSSFColor.BLACK.index);
        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
        font.setFontName("微软雅黑");
        // 把字体 应用到当前样式
        hssfCellStyle.setFont(font);

        //创建Excel的行,在sheet中添加表头第1行
        HSSFRow hssfRow = hssfSheet.createRow(0);
        //创建Excel单元格
        HSSFCell hssfCell;
        for (int i = 0; i < hssfCellValues.length; i++) {
            hssfCell = hssfRow.createCell(i);
            hssfCell.setCellValue(hssfCellValues[i]);
            hssfCell.setCellStyle(hssfCellStyle);
        }

        //创建excel第2到100行
        for (int i = 1; i <= 100; i++) {
            //行
            HSSFRow row = hssfSheet.createRow(i);
            //单元格
            HSSFCell cell;
            //创建一个样式
            HSSFCellStyle style = hssfWorkbook.createCellStyle();
            // 设置这些样式
            style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中
            style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中
            // 设置边框
            style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
            style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
            style.setBorderRight(HSSFCellStyle.BORDER_THIN);
            style.setBorderTop(HSSFCellStyle.BORDER_THIN);

            for (int j = 0; j < hssfCellValues.length; j++) {
                cell = row.createCell(j);
                String cellValue = "";
                switch (j) {
                    case 0:
                        cellValue = String.valueOf(i);
                        break;
                    case 3:
                        cellValue = "到期支付";
                        break;
                    case 7:
                        cellValue = "启用";
                        break;
                    case 8:
                        cellValue = "未推荐";
                        break;
                    case 9:
                        cellValue = "可";
                        break;
                    case 10:
                        cellValue = "可";
                        break;
                }
                cell.setCellValue(cellValue);
                cell.setCellStyle(style);
            }
        }
        return hssfWorkbook;
    }

测试一下导出到本地

public static void main(String[] args) {
        HSSFWorkbook hssfWorkbook = ExcelUtil.getLendPlanImportExcel();
        try {
            FileOutputStream fileOut = new FileOutputStream("/Users/JustWyx/Downloads/test.xls");
            hssfWorkbook.write(fileOut);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

导出后的样式

java poi 导出excel模版

接下来就可以放入项目中了,添加下载链接

<a href="../excel/getLendPlanImportExcel.do">获取导入出借方案模版</a>

controller

@RequestMapping(value = "/getLendPlanImportExcel", method = RequestMethod.GET)
    public void getLendPlanImportExcel(HttpServletRequest request, HttpServletResponse response) throws IOException {
        HSSFWorkbook hssfWorkbook = iLendPlanExcelService.getLendPlanImportExcel();
        OutputStream output = response.getOutputStream();
        response.addHeader("Content-Disposition", "inline;filename=" +
                URLEncoder.encode("出借计划数据","UTF-8") + new SimpleDateFormat("yyyyMMdd").format(new Date()) + ".xls");
        response.setContentType("application/msexcel");
        hssfWorkbook.write(output);
        output.close();
    }

点击链接下载,如图

java poi 导出excel模版

上一篇:

下一篇: