当前位置:   article > 正文

Excel表格的导入导出——EasyExcel_easyexcel导入导出工具类

easyexcel导入导出工具类

参考视频
csdn参考地址

一、导入依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.0.5</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

二、实体类

  • 方式一:@Excel Property()用来设置表头
  • 方式二:@ExcelProperty(value=“名称”,index=索引)
@ToString					
@Data						//set、get、toString方法
@NoArgsConstructor			//无参构造方法
@ExcelIgnoreUnannotated		//没有标注的字段不被导出文件
public class Student{
	@ExcelProperty("编号")
	private Integer id;
	@ExcelProperty("姓名")
	private String name;
	@ExcelProperty("年龄")
	private Integer age;
	@ExcelProperty("电话")
	private String phone;
	@ExcelProperty("生日")
	private Date birthday;
	
	public Student(String name,Integer age,Integer id){
		this.name = name;
		this.age = age;
		this.id = id;
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

三、工具类

public class StudentReadListener implements ReadListener<Student>{
	List<Student> list = new ArrayList<>();

	//每读一行触发一次
	@Override
	public void invoke(Student student,AnalysisContext analysisContext){
		System.out.println("读取到"+student);
		list.add(student);
	}

	//都读完后触发一次
	@Override
	public void doAfterAllAnalysed(AnalysisContext analysisContext){
		System.out.println("读取完毕");
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

四、 导入

  • 在测试类里面试一下就行了
public void importExcel() throws FileNotFoundException{
	//1. 读取文件的流
	File file = new File("D:/student.xlsx");
	InputStream is = new FileInputStream(file);

	//2. 创建一个读取监听器
	StudentReadListener listener = new StudentReadListener();

	//3. 导入的参数配置
	EasyExcel.read(is,Student.class,listener)
		.excelType(ExcelTypeEnum.CSV)
		.sheet(0)			//读第几个工作表,从0开始
		.headRowNumber(1)	//列头占几行
		.doRead();
	)
}	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 有的同学在这里可能会成功运行但是读不出Excel的数据来
    在这里插入图片描述
  • 那么让我们来看一下到底是代码的问题还是说文件的问题
  • 在这里我要读出的文件是在D:/student.xslx 在这里插入图片描述
  • 那我们把文件改一下,改成一个不存在的文件,看看是什么反映
    在这里插入图片描述
  • 说明刚刚代码确实是指向了“D:/student.xlsx”文件,所以在连接方面是没有问题的。那么是代码配置问题还是说文件有问题。
  • 回到这个问题,我发现读取到Student的次数跟我Excel文件中的行数是一样的,是不是巧合呢?
    在这里插入图片描述
  • 于是我把Excel里面的内容清空了,得到了如下结果
    在这里插入图片描述
  • 意思就是说读到了Excel文件的行列,但就是返回的时候变成了null,所以我猜测是不是没有将Excel表中的字段一 一对应插入Student模型中
  • 到这里看到网上一大堆有的没的,都是不靠谱的解决办法,于是我先进行Excel文件的导出,如果能够导出,那我对这个导出文件进行导入,因为导出Excel的文件格式肯定是对的,并且导出代码中的配置参数也用于导入代码中就好了。
  • 下面 “五、导出” 是没问题的
  • 然后我将相同的导出参数配置到导入参数配置中
        //这是导出Excel表格的参数配置
        EasyExcel.write(response.getOutputStream())
                .head(Student.class)
                .excelType(ExcelTypeEnum.XLSX)
                .sheet("数据")
                .doWrite(list);
    }
		//同样应用于导入Excel表格的参数配置
        EasyExcel.read(inputStream, Student.class,listener)
                .excelType(ExcelTypeEnum.XLSX)
                .sheet("数据")			//读第几个工作表,从0开始
                .headRowNumber(1)	//列头占几行
                .doRead();	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 结果是成功了
    在这里插入图片描述
  • 虽然不知道为什么导入不成功,但是通过先将文件导出,再导入,那就没问题了

五、 导出

  • 通过localhost:8080/export,就可以导出文件了
    @GetMapping("/export")
    public void exportExcel(HttpServletResponse response) throws IOException {
        List<Student> list = new ArrayList<>();
        list.add(new Student("梅超风",19,3342));
        list.add(new Student("西门灵风",39,5621));
        list.add(new Student("司马长风",25,82145));

        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
        response.setCharacterEncoding("utf-8");

        //设定要导出的excel的文件名
        String fileName = URLEncoder.encode("student","UTF-8").replaceAll("\\+","%20");
        response.setHeader("Content-disposition","attachment;filename="+fileName+".xlsx");

        //导出Excel表格
        EasyExcel.write(response.getOutputStream())
                .head(Student.class)
                .excelType(ExcelTypeEnum.XLSX)
                .sheet("数据")
                .doWrite(list);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码创新者/article/detail/61089
推荐阅读
相关标签
  

闽ICP备14008679号