easyexcel的读写操作

easyexcel是基于java的读写excel的开源项目 --读写也可理解为上传和下载

写操作

一、引入依赖

html 复制代码
<dependency>
 <groupId>com.alibaba</groupId>
 <artifactId>easyexcel</artifactId>
 <version>3.0.5</version>
</dependency>

二、封装相应对象

java 复制代码
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ExcelDemo {
 @ExcelProperty(value = "姓名")    //标记excel的标题内容
 private  String name;
 @ExcelProperty(value = "年龄")
 private Integer age;
 @ExcelIgnore    //标记该属性不写入表格
 private String sex;
}

三、通过eayexcel完成写入的操作

java 复制代码
public class TestWrite{
 public static void main(String[] args){
     String fileName = "表格要保存的地址\保存后的文件名称";	//例:D:\projeck\新建文件夹\a.xlsx
     List<ExcelDemo> data = new ArrayList();
     data.add(new ExcelDemo("aaa",18,"男"));
     data.add(new ExcelDemo("bbb",13,"女"));
     EasyExcel.write(fileName, ExcelDemo.class).sheet("表格的工程名").doWrite(data);
 }
}

web页面实现写操作

java 复制代码
@Controller
public class ExcelController{
 @GetMapping("download")
 public void download(HttpServletResponse response) throws IOException{
     response.setContenType("application/vnd.opencmlformats-officedocument.spreadsheetml.sheet");
     response.setCharacterEncoding("utf-8");
     //这里的URLEncoder.encode用来防止中文乱码
      String fileName = URLEncoder.encode("下载的文件名", "UTF-8").replaceALL("\\+","%28");
     response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + filename = ".xlsx");
     List<ExcelDemo> data = new ArrayList();
     data.add(new ExcelDemo("aaa",18,"男"));
     data.add(new ExcelDemo("bbb",13,"女"));
     EasyExcel.write(response.getOutputStream(), ExcelDemo.class).sheet("表格的工程名").doWrite(data);
 }
}

读操作

一、监听器

java 复制代码
@Slf4j
public class DemoDataListener implements ReadListener<ExcelDemo>{
private static final int BATCH_COUNT = 100;	//每100条存储数据库,然后清理list
private List<ExcelDemo> cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);//数据缓存
private DemoDAO demoDAO;	//这个可以是一个dao,如果有业务逻辑也可以是service
public DemoDataListener(){
  demoDAO = new DemoDAO();	//因为这里是dao所以随便new一个
}
public DemoDataListener(){
  this.demoDAO = demoDAO;	//如果使用的是spring,使用这个构造方法,每次创建Listener需要传入spring管理类
}
@Override
//每条数据解析都会调用这个方法
public void invoke(ExcelDemo data, AnalysisContext context){
  sout(JSON.toJSONString(data));
  if(cachedDataList.size() >= BATCH_COUNT){	//达到BATCH_COUNT的数量需要存储一次数据库,防止数据过多损坏
      saveData();
      cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);	//存储完成清理list
  }
}
@Override
//所有数据解析完成后调用
public void doAfterAllAnalysed(AnalysisContext context){
  saveData();	//这里保存数据确保最后遗留的数据也会存储到数据库
}
//存储数据库
private void saveData(){
  demoDAO.sava(cachedDataList);
}
}

二、持久层dao

java 复制代码
public class DemoDAO{
public void save(List<ExcelDemo> list){
  //自己写一个mapper,新增一个方法batchInsert,将数据放入数据库
}
}

三、测试

java 复制代码
public class TestReadDemo{
psvm{
  String fileName = "将要读取的文件存放的地址";	//例:D:\projeck\新建文件夹\a.xlsx
  //默认读取第一个sheet
  EasyExcel.red(fileName, ExcelDemo.class, new DemoDataListener()).sheet().doRead();
}
}

web页面实现读操作

  1. 引入依赖

    XML 复制代码
    <dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.4</version>
    </dependency>
  2. 文件上传解析器

    XML 复制代码
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="1000000000"/>
    </bean>
  3. Controller层

    java 复制代码
    @Autowired
    private DemoDAO demoDAO;	//注入dao层,未来根据业务逻辑也可以注入service
    @PostMapping("upload")
    @ResponseBody
    public String upload(MultipartFile file) throws IOException{
    EasyExcel.read(file.getInputStream(), ExcelDemo.class, new DemoDataListener(demoDAO)).sheet().doRead();
    return "success";
    }
相关推荐
数据知道4 分钟前
Go基础:正则表达式 regexp 库详解
开发语言·mysql·golang·正则表达式·go语言
小蒜学长4 分钟前
jsp基于JavaWeb的原色蛋糕商城的设计与实现(代码+数据库+LW)
java·开发语言·数据库·spring boot·后端
zhangfeng11339 分钟前
亲测可用,R语言 ggplot2 箱线图线条控制参数详解,箱线图离散数值控制
开发语言·python·r语言·生物信息
yzx9910139 分钟前
国庆科技感祝福:Python 粒子国旗动画
开发语言·人工智能·python
摇滚侠10 分钟前
Spring Boot中使用线程池来优化程序执行的效率!笔记01
java·spring boot·多线程
毕设源码-江学长17 分钟前
计算机毕业设计java共享茶室预约微信小程序 微信小程序中的共享茶室预订平台 茶室共享预约小程序的设计与开发
java·微信小程序·课程设计
迪丽热爱17 分钟前
【练】C程序设计-01程序设计和C语言
c语言·开发语言
扶尔魔ocy18 分钟前
【QT常用技术讲解】opencv实现摄像头图像检测并裁剪物体
开发语言·qt·opencv
卡布奇诺-海晨1 小时前
2025版本的idea解决Git冲突
java·git·intellij-idea
Flash Dog1 小时前
【MyBatis】——执行过程
java·mybatis