java解析EasyExcel工具的使用

底层是一行一行读取表格中的内容

 阿里的

一、 监听器方法(高级) 

--EasyExcel写操作----

1导入依赖 两个

        <!-- EasyExcel 还需要poi的依赖 父pom里面有了        <poi.version>3.17</poi.version>
        https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.1.1</version>
        </dependency>

2设置写入类

package until.easyExcel;

import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;

@Data
public class DemoEasyExcel {

    //设置表头名称
    @ExcelProperty
    private Integer sno;
    @ExcelProperty
    private String sname;


}

3先把数据写入到类中  再调用esaySexcel的方法写入excel中

 @Test
    public void easyexcelwrite(){
        //设置生成的文件地址
        String fileName="D:\\Test\\write.xls";
        // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
        //调用方法实现
        EasyExcel.write(fileName, DemoEasyExcel.class).sheet("写入方法一").doWrite(getData());
                        //文件       类                    sheet名字                  写入数据
    }

    //设置类的数据 就是先把数据放到类里面
    public List<DemoEasyExcel> getData(){
        List<DemoEasyExcel> list = new ArrayList<DemoEasyExcel>();
        for (int i = 0; i < 10; i++) {
            DemoEasyExcel data = new DemoEasyExcel();
            data.setSno(i);
            data.setSname("张三"+i);
            list.add(data);
        }
        return list;
    }

 

 

 

 --EasyExcel读操作----

 

1导入依赖 如上

2 设置存储excel内容的一个类

package until.easyExcel;

import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;

@Data
public class ReadEasyExcel {

    //设置表头名称
    @ExcelProperty(value = "学号", index = 0)
    private Integer sno;
    @ExcelProperty(value = "姓名",index = 1)
    private String sname;


}

3设置监听器 实现AnalysisEventListener 注意泛型

package until.easyExcel;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;

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

public class ExcelListener extends AnalysisEventListener<ReadEasyExcel> {

    //创建list集合封装最终的数据
//    List<ReadEasyExcel> list = new ArrayList<ReadEasyExcel>();

    //读取excel内容
    @Override
    public void invoke(ReadEasyExcel readEasyExcel, AnalysisContext analysisContext) {
        System.out.println("数据:"+readEasyExcel);
    }

    //读取表头的方法
    @Override
    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
        System.out.println("表头:"+headMap);
    }

    //读取完成之后执行的方法
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        System.out.println("结束");
    }
}

 

4 设置excel文件位置

调用excel 方法 实现

package until.easyExcel;

import com.alibaba.excel.EasyExcel;
import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

public class TestReadDemo {


    @Test
    public void easyexcelwrite(){
        //设置被读取的文件地址
        String fileName="D:\\Test\\write.xls";

        //读到这个类里面
        EasyExcel.read(fileName,ReadEasyExcel.class,new ExcelListener()).sheet().doRead();


    }

}

 二 、非监听器方法(简单使用)

  Excel写入数据库

    

 把excel导入进入数据库
    @PostMapping("readExcel")
    public R readExcel(MultipartFile file) throws Exception{


        List<ExcelSubjectData> objectList = EasyExcel.read(file.getInputStream())
                .head(ExcelSubjectData.class)
                .sheet()
                .headRowNumber(1)
                .doReadSync();
        log.info(String.valueOf(objectList));
//       调用方法把数据存入数据库里 eduSubjectService.savaSubject2(file);

        return R.ok();
    }

  从sql中读取数据到excel

    @Override //sql导入excel
    public void exportExcel(HttpServletResponse response) {
        //设置生成的文件地址
//        String fileName="D:\\Test\\write.xls";
        // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
        //调用方法实现

        try {
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            response.setCharacterEncoding("utf-8");
            // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
            String fileName = URLEncoder.encode("数据表2", "UTF-8").replaceAll("\\+", "%20");
            response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
//                String fileName="D:\\Test\\write2.xls";
              EasyExcel.write(response.getOutputStream(), ExcelSubjectData.class).sheet("写入方法一").doWrite(getData());
              log.info(String.valueOf(getData()));
//              EasyExcel.write
        //文件       类                    sheet名字                  写入数据
        } catch (Exception e) {
            // 重置response\
            response.reset();
            response.setContentType("application/json");
            response.setCharacterEncoding("utf-8");
        }


    }

 

posted on 2022-05-08 14:19  ziwang520  阅读(439)  评论(0编辑  收藏  举报