Hutool-poi是针对Apache POI的封装,操作Excel【二】

package com.example.demo.hutool;

import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import lombok.Data;
import org.junit.Test;

import java.util.List;
import java.util.Map;

/**
 * @Description Hutool-poi是针对Apache POI的封装
 *
 *  使用Hutool的方法操作Office文件,Hutool提供的类有:
 *      ExcelUtil Excel工具类,读取的快捷方法都被封装于此。
 *      ExcelReader Excel读取器,Excel读取的封装,可以直接构造后使用。
 *      ExcelWriter Excel生成并写出器,Excel写出的封装(写出到流或者文件),可以直接构造后使用。
 *
 *  ExcelReader类的主要方法:
 *      构造器:
 *      ExcelReader(File bookFile, int sheetIndex)
 *      ExcelReader(File bookFile, String sheetName)
 *      ExcelReader(InputStream bookStream, int sheetIndex)
 *      ExcelReader(InputStream bookStream, String sheetName)
 *      ExcelReader(String excelFilePath, int sheetIndex)
 *      ExcelReader(org.apache.poi.ss.usermodel.Workbook book, int sheetIndex)
 *      ExcelReader(org.apache.poi.ss.usermodel.Workbook book, String sheetName)
 *
 *      方法:
 *      ExcelReader	addHeaderAlias(String header, String alias) 增加标题别名
 *      Map<String,String>	getHeaderAlias() 获得标题行的别名Map
 *      ExcelWriter	getWriter() 获取Excel写出器 在读取Excel并做一定编辑后,获取写出器写出
 *      boolean	isIgnoreEmptyRow() 是否忽略空行
 *
 *      List<List<Object>>	read() 读取工作簿中指定的Sheet的所有行列数据
 *      void	read(CellHandler cellHandler) 读取工作簿中指定的Sheet,此方法为类流处理方式,
 *              当读到指定单元格时,会调用CellEditor接口,
 *              用户通过实现此接口,可以更加灵活的处理每个单元格的数据。
 *      List<List<Object>>	read(int startRowIndex) 读取工作簿中指定的Sheet
 *      List<List<Object>>	read(int startRowIndex, int endRowIndex) 读取工作簿中指定的Sheet,此方法会把第一行作为标题行,替换标题别名
 *      void	read(int startRowIndex, int endRowIndex, CellHandler cellHandler) 读取工作簿中指定的Sheet,此方法为类流处理方式,
 *              当读到指定单元格时,会调用CellEditor接口,
 *              用户通过实现此接口,可以更加灵活的处理每个单元格的数据。
 *      <T> List<T>	read(int headerRowIndex, int startRowIndex, Class<T> beanType) 读取Excel为Bean的列表
 *      <T> T	read(SheetReader<T> sheetReader) 读取数据为指定类型
 *      List<Map<String,Object>>	readAll() 读取Excel为Map的列表,读取所有行,
 *              默认第一行做为标题,数据从第二行开始,
 *              Map表示一行,标题为key,单元格内容为value
 *      <T> List<T>	readAll(Class<T> beanType) 读取Excel为Bean的列表,读取所有行,默认第一行做为标题,数据从第二行开始
 *      String	readAsText(boolean withSheetName) 读取为文本格式 使用ExcelExtractor 提取Excel内容
 *      Object	readCellValue(int x, int y) 读取某个单元格的值
 *      List<Object>	readRow(int rowIndex) 读取某一行数据
 *      ExcelReader	removeHeaderAlias(String header) 去除标题别名
 *      ExcelReader	setHeaderAlias(Map<String,String> headerAlias) 设置标题行的别名Map
 *      ExcelReader	setIgnoreEmptyRow(boolean ignoreEmptyRow) 设置是否忽略空行
 *      ExcelReader	setCellEditor(CellEditor cellEditor) 设置单元格值处理逻辑
 *              当Excel中的值并不能满足我们的读取要求时,通过传入一个编辑接口,
 *              可以对单元格值自定义,例如对数字和日期类型值转换为字符串等。
 *
 * @Auther guofeng.xie
 * @Date 2020/11/15 16:02
 */
public class TestExcelReader {
    /**
     * ExcelReader类的使用
     *
     * 读取Excel内容的封装,
     * 通过构造ExcelReader对象,指定被读取的Excel文件、流或工作簿,然后调用readXXX方法读取内容为指定格式。
     */
    @Test
    public void testExcelReader() {
        //1. 读取Excel中所有行和列,都用列表表示(一行一行的读取)
        //id name age
        //1 小明 12
        ExcelReader reader = ExcelUtil.getReader("static/test.xlsx");
        List<List<Object>> readAll = reader.read();
        for (List list : readAll) {
            for (Object obj : list) {
                System.out.println(obj);
            }
        }

        //2. 读取为Map列表,默认第一行为标题行,Map中的key为标题,value为标题对应的单元格值。
        //id:1
        //name:小明
        //age:12
        ExcelReader reader2 = ExcelUtil.getReader("static/test.xlsx");
        reader2.addHeaderAlias("name", "personName"); //增加标题别名
        List<Map<String,Object>> maps = reader2.readAll();
        for (Map map : maps) {
            map.forEach((key, value) -> {
                System.out.println(key + ":" + value);
            });
        }

        //3. 读取为Bean列表,Bean中的字段名为标题,字段值为标题对应的单元格值。
        //TestExcel.Person(id=1, name=小明, age=12)
        ExcelReader reader3 = ExcelUtil.getReader("static/test.xlsx");
        List<Person> all = reader3.readAll(Person.class);
        for (Person person : all) {
            System.out.println(person);
        }
    }

    @Data
    private static class Person {
        private int id;
        private String name;
        private int age;
    }
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值