hutool ExcelUtil导出excel、读取excel内容

ExcelUtil为操作Excel的工具类,包括封装的excel读取的ExcelReader对象,excel生成的ExcelWriter对象。

导出

ExcelUtil将Excel写出封装为ExcelWriter,原理为包装了Workbook对象,每次调用merge(合并单元格)或者write(写出数据)方法后只是将数据写入到Workbook,并不写出文件,只有调用flush或者close方法后才会真正写出文件。
由于机制原因,在写出结束后需要关闭ExcelWriter对象,调用close方法即可关闭,此时才会释放Workbook对象资源,否则带有数据的Workbook一直会常驻内存。

获取导出ExcelWriter对象ExcelUtil.getWriter()

getWriter()有几个重载方法

/**
* destFile 目标文件
* sheetName sheet表名
*/
getWriter(File destFile, String sheetName)  
/**
* destFilePath 目标文件路径
* sheetName sheet表名
*/
getWriter(String destFilePath, String sheetName)
/**
* destFile 目标文件
*/
getWriter(File destFile)
/**
* destFilePath 目标文件路径
*/
getWriter(String destFilePath)

导出到固定磁盘位置

   @PostMapping("/export")
   public Result<String> exportData(@RequestBody List<Map<String, Object>> dataList) {
       if (CollUtil.isNotEmpty(dataList)) {
           // 通过hutool工具类创建writer,默认创建xls格式
           ExcelWriter writer = ExcelUtil.getWriter("E:\test\test.xls");
           //将list map数据写出文件
           writer.write(dataList, true);
           writer.close();
       } else {
           return ResultUtil.failure("表无数据!");
       }
   }

以response流的方式输出

	@PostMapping("/exportData")
    public Result<String> exportDataForExcel(@RequestBody List<Map<String, Object>> dataList,HttpServletResponse response) throws IOException {
        if (CollUtil.isNotEmpty(dataList)) {
            // 通过工具类创建writer,默认创建xls格式
            ExcelWriter writer = ExcelUtil.getWriter();
            writer.write(dataList, true);
            response.setContentType("application/vnd.ms-excel;charset=utf-8");
       		response.setHeader("Content-Disposition", "attachment;filename=test.xls");
            ServletOutputStream out = response.getOutputStream();
            writer.flush(out);
            writer.close();
            return null;
        } else {
            return ResultUtil.failure("表无数据!");
        }

读取excel内容

读取Excel内容的封装,通过构造ExcelReader对象,指定被读取的Excel文件、流或工作簿,然后调用readXXX方法读取内容为指定格式。

读取excel内容的其他read方法

/**
* startRowIndex 起始行(包含,从0开始计数)
*/
read(int startRowIndex);
/**
* startRowIndex  起始行(包含,从0开始计数)
* endRowIndex    读取结束行(包含,从0开始计数)
*/
read(int startRowIndex, int endRowIndex);
/**
* startRowIndex 起始行(包含,从0开始计数)
* endRowIndex   结束行(包含,从0开始计数)
* aliasFirstLine 是否首行作为标题行转换别名
*/
read(int startRowIndex, int endRowIndex, boolean aliasFirstLine);
/**
* beanType  每行对应Bean的类型
*/
readAll(Class<T> beanType);

读取为Map列表

	private List<Map<String,Object>> readerExcelInfo(String excelUrl){
        List<Map<String,Object>> result = new ArrayList<>();
        if(excelUrl.isEmpty()){
            return Collections.emptyList();
        }
        try {
            ExcelReader excelReader = ExcelUtil.getReader(new File(excelUrl));
            //读取为Map列表,默认第一行为标题行,Map中的key为标题,value为标题对应的单元格值。
            result = excelReader.readAll();
        }catch (Exception e){
            e.printStackTrace();
        }
        return result;
    }
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HutoolExcelUtil提供了非常方便的导入导出Excel的方法,可以处理复杂表头的情况。具体步骤如下: 1. 导入ExcelUtil类和相关依赖: ```java import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.ExcelWriter; ``` 2. 创建一个ExcelWriter对象,并指定输出路径: ```java ExcelWriter writer = ExcelUtil.getWriter("D:/test.xlsx"); ``` 3. 定义表头信息,使用链式语法设置表头: ```java writer.merge(0, 0, 0, 3, "学生信息表"); writer.merge(1, 1, 0, 1, "基本信息"); writer.merge(1, 1, 2, 3, "联系方式"); writer.writeRow(Arrays.asList("姓名", "年龄", "电话", "邮箱")); ``` 4. 写入数据: ```java List<Student> list = new ArrayList<>(); list.add(new Student("张三", 18, "12345678901", "[email protected]")); list.add(new Student("李四", 20, "23456789012", "[email protected]")); writer.write(list, true); ``` 5. 关闭ExcelWriter对象: ```java writer.close(); ``` 完整代码示例: ```java import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.ExcelWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Test { public static void main(String[] args) { ExcelWriter writer = ExcelUtil.getWriter("D:/test.xlsx"); writer.merge(0, 0, 0, 3, "学生信息表"); writer.merge(1, 1, 0, 1, "基本信息"); writer.merge(1, 1, 2, 3, "联系方式"); writer.writeRow(Arrays.asList("姓名", "年龄", "电话", "邮箱")); List<Student> list = new ArrayList<>(); list.add(new Student("张三", 18, "12345678901", "[email protected]")); list.add(new Student("李四", 20, "23456789012", "[email protected]")); writer.write(list, true); writer.close(); } } class Student { private String name; private int age; private String phone; private String email; public Student(String name, int age, String phone, String email) { this.name = name; this.age = age; this.phone = phone; this.email = email; } // getter、setter方法省略 } ``` 以上代码中,我们通过ExcelWriter对象的merge方法来设置表头的合并单元格,使用writeRow方法写入表头数据,使用write方法写入实际数据,最后关闭ExcelWriter对象即可。 注意:代码中的Student类是自定义的,可以根据实际情况修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值