easyexcel的使用

一、为什么使用easyexcel

解析excel现在比较有名的依赖是poi和jwi,但是他们都存在不能解析大excel的问题,导致这个问题的原因是因为poi和jwi都是读取到内存中解析的。而一个3M的excel用POI sax解析依然需要100M左右内,改用easyexcel可以降低到几M。因为easyexcel在必要时候还使用了磁盘读取。03版依赖POI的sax模式,在上层做了模型转换的封装,方便用户使用。

二、上代码

1、依赖(junit和lombok你们酌情添加)

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>easyexcel</artifactId>
        <version>2.1.4</version>
    </dependency>
    <dependency>
        <groupId>org.apache.xmlbeans</groupId>
        <artifactId>xmlbeans</artifactId>
        <version>3.1.0</version>
    </dependency>
    <dependency>
        <groupId>net.sf.saxon</groupId>
        <artifactId>saxon-dom</artifactId>
        <version>8.7</version>
    </dependency>

2、映射类

@Data public class DataDemo {
@ExcelProperty("姓名")
private String name;

@ExcelProperty("生日")
private Date birthday;

@ExcelProperty("薪资")
private Double salary;
}

3、读取excel的处理逻辑编写

public class ExcleDemoListener extends AnalysisEventListener
{
@Override
public void invoke(DataDemo dataDemo, AnalysisContext analysisContext) {
System.out.println(“解析到一条数据:”+ dataDemo.toString());
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
System.out.println(“所有数据解析完成!”);
} }

4、测试类

public class EasyExcelTest {
private String getResourcePath(){ 
// return  this.getClass().getClassLoader().getResource("").getPath();
    return "这里填文件路径";
}
/**
 * 循环制造list集合数据
 * @return
 */
private List<DataDemo> data() {
    List<DataDemo> list = new ArrayList<>();
    //算上标题,做多可写65536行
    //超出:java.lang.IllegalArgumentException: Invalid row number (65536) outside allowable range (0..65535)
    for (int i = 0; i < 5; i++) {
        DataDemo data = new DataDemo();
        data.setName("yixin" + i);
        data.setBirthday(new Date());
        data.setSalary(123456.1234);
        list.add(data);
    }
    return list;
}

/**
 * 写入xlsx文件测试方法
 */
@Test
public void simpleWriteXlsx() {
    String fileName = getResourcePath()+"demoExcel2.xlsx"; //需要提前新建目录
    // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
    EasyExcel.write(fileName, DataDemo.class).sheet("模板").doWrite(data());
}

/**
 * 写入xls文件测试方法
 */
@Test
public void simpleWriteXls() {
    String fileName = getResourcePath()+"demoExcel1.xls";
    // 如果这里想使用03 则 传入excelType参数即可
    EasyExcel.write(fileName, DataDemo.class).excelType(ExcelTypeEnum.XLS).sheet("模板").doWrite(data());
}

/**
 * 读取xlsx文件最简单的读
 */
@Test
public void simpleReadXlsx() {
    String fileName = getResourcePath()+"demoExcel2.xlsx";
    // 这里默认读取第一个sheet
    EasyExcel.read(fileName, DataDemo.class, new ExcleDemoListener()).sheet().doRead();
}

/**
 * 读取xls文件最简单的读
 */
@Test
public void simpleReadXls() {
    String fileName = getResourcePath()+"demoExcel1.xls";
    EasyExcel.read(fileName, DataDemo.class, new ExcleDemoListener()).excelType(ExcelTypeEnum.XLS).sheet().doRead();
} }
  • 想深入了解当然要去官网了。
    easyexcel官网:https://easyexcel.opensource.alibaba.com/docs/current/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值