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";
    }
相关推荐
持敬chijing2 小时前
PHP开发-环境搭建-安装phpstudy-vscode工具
开发语言·vscode·php
xiaohaiAIgeo3 小时前
【2026年】ASHRAE 110与EN 14175通风柜测试标准对比:进口与国产品牌性能差距
java·前端·数据库·科普知识
charlie1145141913 小时前
Cinux · 第一次跳进 Ring 3:用户态与特权隔离
开发语言·c++·操作系统·开源项目
躺不平的理查德3 小时前
Windows C++ 第三方库使用流程备忘录--OpenCV
开发语言·c++
菜冻鱼4 小时前
Python-sklearn-评估指标
开发语言·人工智能·python·机器学习·numpy·pandas·sklearn
你挚爱的强哥4 小时前
【exportExcel】单纯靠js不用任何其他第三方插件导出xls格式文件
开发语言·javascript·ecmascript
AI人工智能+电脑小能手4 小时前
大白话说Java设计模式-08-建造者模式(业务实战篇)
java·设计模式·建造者模式·架构设计·对象构建
Hello_Damon_Nikola4 小时前
AC7911从入门到精通
开发语言·嵌入式硬件·物联网·php
xbgRS4 小时前
java中的线程
java
worxfr4 小时前
Go 并发控制:从 Channel 方向约束到实战模式
开发语言·后端·golang