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";
    }
相关推荐
没有晚不了安几秒前
1.13作业
开发语言·python
布谷歌4 分钟前
Oops! 更改field的数据类型,影响到rabbitmq消费了...(有关于Java序列化)
java·开发语言·分布式·rabbitmq·java-rabbitmq
PXM的算法星球6 分钟前
java(spring boot)实现向deepseek/GPT等模型的api发送请求/多轮对话(附源码)
java·gpt·microsoft
被程序耽误的胡先生10 分钟前
java中 kafka简单应用
java·开发语言·kafka
刀客12310 分钟前
python小项目编程-中级(1、图像处理)
开发语言·图像处理·python
卷卷的小趴菜学编程15 分钟前
c++之多态
c语言·开发语言·c++·面试·visual studio code
F202269748622 分钟前
Spring MVC 对象转换器:初级开发者入门指南
java·spring·mvc
冷琴199635 分钟前
基于Python+Vue开发的反诈视频宣传管理系统源代码
开发语言·vue.js·python
楠枬43 分钟前
网页五子棋——对战后端
java·开发语言·spring boot·websocket·spring
kyle~1 小时前
thread---基本使用和常见错误
开发语言·c++·算法