基于Hutool工具的Excel导出实现

时间:2025-03-18 08:37:00

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

一、Hutool依赖

    <!-- Excel导出、导入-->
    <dependency>
        <groupId></groupId>
        <artifactId>hutool-all</artifactId>
        <version>5.8.5</version>
    </dependency>
    <dependency>
        <groupId></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){

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

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

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

            //数据处理。。。。。

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

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

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

            //数据处理。。。。

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

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

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

    //拼接下拉框班级列表选项
    List<String> options = ();
    ("第一项 xxx");
    ("第二项 xxx");
    //设置下拉框
    if ((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 = (sheetName);
        for (int i = 0; i < (); i++) {
            String option = (i);
            Row row = (i);
            Cell cell = (0);
            (option);
        }
        //设置隐藏
        ((sheetName), true);
        //返回隐藏地址
        return "=" + sheetName + "!$A$1:$A$" + (() + 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 = ();
        //设置下拉框选项链接地址
        DataValidationConstraint constraint = (link);
        DataValidation dataValidation = (constraint, cas);
        //将下拉数据放入下拉框
        (dataValidation);
    }