基于Hutool工具的Excel导出实现

简介:Hutool是一款十分好用的开发工具集,里面包含了大部分日常开发常用的工具,使用简单方便,可以大大提升日常开发效率,十分推荐大家使用。这里简单总结一下基于Hutool的Excel使用。

一、Hutool依赖

    <!-- Excel导出、导入-->
    <dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-all</artifactId>
        <version>5.8.5</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>5.0.0</version>
    </dependency>

二、导出Excel文件

1、controller接口
    @GetMapping("/export/template")
    @ApiOperation(value = "导出成员批量导入Excel模板")
    public void exportTemplate(HttpServletResponse response){

        tenantUserBatchService.exportTemplate(response);
    }
2、Service类导出方法 

    //基于ExcelUtil工具生成新的Excel

    //基于ExcelUtil工具,直接创建Excel文件
    public void exportTemplate(HttpServletResponse response) {
        try {
            //创建xlsx格式的
            ExcelWriter writer = ExcelUtil.getWriter(true);

            //数据处理。。。。。

            response.setContentType("application/vnd.ms-excel;charset=utf-8");
            //test.xlsx是弹出下载对话框的文件名,不能为中文,中文请自行编码
            response.setHeader("Content-Disposition","attachment;filename=test.xlsx");
            ServletOutputStream out = response.getOutputStream();
            writer.flush(out);
            writer.close();
            IoUtil.close(out);
        }catch (Exception e){
            throw new BusinessException("导出Excel文件失败");
        }
    }

    //基于ExcelUtil工具,根据已有的Excel生成新的Excel 

    
    //基于ExcelUtil工具,根据已有的Excel生成新的Excel
    public void exportTemplate(HttpServletResponse response) {
        try {
            //1、获取Excel读对象(从流中)
            ExcelReader reader = ExcelUtil.getReader(this.getImportExcelTemplate());
            //2、获取Excel工作簿
            Workbook workbook = reader.getWorkbook();

            //数据处理。。。。

            response.setContentType("application/vnd.ms-excel;charset=utf-8");
            //test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
            response.setHeader("Content-  Disposition","attachment;filename=import_teacher.xls");
            ServletOutputStream out = response.getOutputStream();
            workbook.write(out);
            out.flush();
            out.close();
            reader.close();
        }catch (Exception e){
            throw new BusinessException("导出Excel文件失败");
        }
    }

三、给Excel单元格设置下拉框

1、生成菜单列表,创建一个隐藏的sheet,并设置填充下拉框的位置及参数信息

    //拼接下拉框班级列表选项
    List<String> options = Lists.newArrayList();
    options.add("第一项 xxx");
    options.add("第二项 xxx");
    //设置下拉框
    if (CollUtil.isNotEmpty(options)) {
       //设置隐藏域
       String link = creatHiddenSheet(workbook, options);
       //填充下拉框列表
       creatHiddenBox(sheet, link, 3, 1000, 1, 1);
    }

2、 创建隐藏sheet方法

    private String creatHiddenSheet(Workbook workbook, List<String> options) {
        final String sheetName = "sheet2";
        Sheet sheet = workbook.createSheet(sheetName);
        for (int i = 0; i < options.size(); i++) {
            String option = options.get(i);
            Row row = sheet.createRow(i);
            Cell cell = row.createCell(0);
            cell.setCellValue(option);
        }
        //设置隐藏
        workbook.setSheetHidden(workbook.getSheetIndex(sheetName), true);
        //返回隐藏地址
        return "=" + sheetName + "!$A$1:$A$" + (options.size() + 1);
    }

3、创建下拉框列表 

    /**
     * 创建Excel下拉框(字符255以上,下拉框链接隐藏域)
     *
     * @param sheet
     * @param link     下拉框选项链接地址
     * @param firstRow 起始行
     * @param lastRow  结束行
     * @param firstCol 起始列
     * @param lastCol  结束列
     */
    private void creatHiddenBox(Sheet sheet, String link, int firstRow, int lastRow, int firstCol, int lastCol) {
        CellRangeAddressList cas = new CellRangeAddressList(firstRow, lastRow, firstCol, lastCol);
        //创建下拉数据列
        DataValidationHelper helper = sheet.getDataValidationHelper();
        //设置下拉框选项链接地址
        DataValidationConstraint constraint = helper.createFormulaListConstraint(link);
        DataValidation dataValidation = helper.createValidation(constraint, cas);
        //将下拉数据放入下拉框
        sheet.addValidationData(dataValidation);
    }

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
使用Hutool导出Excel表格的格式可以通过设置样式实现。下面是一个示例代码: ```java // 创建工作簿 Workbook workbook = ExcelUtil.createWorkbook(); // 创建工作表 Sheet sheet = workbook.createSheet("Sheet1"); // 创建表头行 Row headerRow = sheet.createRow(0); // 创建表头单元格并设置样式 CellStyle headerStyle = workbook.createCellStyle(); headerStyle.setAlignment(HorizontalAlignment.CENTER); headerStyle.setVerticalAlignment(VerticalAlignment.CENTER); headerStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); headerStyle.setBorderTop(BorderStyle.THIN); headerStyle.setBorderBottom(BorderStyle.THIN); headerStyle.setBorderLeft(BorderStyle.THIN); headerStyle.setBorderRight(BorderStyle.THIN); headerStyle.setWrapText(true); // 设置表头单元格的值和样式 Cell cell1 = headerRow.createCell(0); cell1.setCellValue("姓名"); cell1.setCellStyle(headerStyle); Cell cell2 = headerRow.createCell(1); cell2.setCellValue("年龄"); cell2.setCellStyle(headerStyle); // 创建数据行并设置样式 CellStyle dataStyle = workbook.createCellStyle(); dataStyle.setAlignment(HorizontalAlignment.CENTER); dataStyle.setVerticalAlignment(VerticalAlignment.CENTER); dataStyle.setBorderTop(BorderStyle.THIN); dataStyle.setBorderBottom(BorderStyle.THIN); dataStyle.setBorderLeft(BorderStyle.THIN); dataStyle.setBorderRight(BorderStyle.THIN); dataStyle.setWrapText(true); // 设置数据单元格的值和样式 Row dataRow = sheet.createRow(1); Cell cell3 = dataRow.createCell(0); cell3.setCellValue("张三"); cell3.setCellStyle(dataStyle); Cell cell4 = dataRow.createCell(1); cell4.setCellValue(20); cell4.setCellStyle(dataStyle); // 导出Excel表格 ExcelUtil.writeToFile(workbook, "test.xlsx"); ``` 上述代码中,通过创建CellStyle对象并设置其属性来定义表头和数据行的样式,例如设置对齐方式、边框、背景颜色等。然后将样式应用到对应的单元格中即可。最后,通过ExcelUtil工具类的writeToFile方法将工作簿导出Excel文件。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

黑色的四叶草

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

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

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

打赏作者

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

抵扣说明:

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

余额充值