首页 > 其他分享 >easyexcel的读写操作

easyexcel的读写操作

时间:2024-07-24 19:55:07浏览次数:14  
标签:读写操作 ExcelDemo easyexcel private public new data class

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

写操作

一、引入依赖

<dependency>
 <groupId>com.alibaba</groupId>
 <artifactId>easyexcel</artifactId>
 <version>3.0.5</version>
</dependency>

二、封装相应对象

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

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

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页面实现写操作

@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);
 }
}

读操作

一、监听器

@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

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

三、测试

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

web页面实现读操作

  1. 引入依赖
    <dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.4</version>
    </dependency>
  2. 文件上传解析器
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="1000000000"/>
    </bean>
  3. Controller层
    @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";
    }

标签:读写操作,ExcelDemo,easyexcel,private,public,new,data,class
From: https://blog.csdn.net/Baizeh/article/details/140610638

相关文章

  • 同时使用easyexcel和Apache poi的依赖冲突问题
      前言Hello,hello!这里是Blue,今天我写代码遇到了一个这样的问题,我在使用easyexcel的时候它无法去执行我的操作,通过我一定的判断最终解决了问题报错 com.alibaba.excel.exception.ExcelAnalysisException:java.lang.NoClassDefFoundError:org/apache/poi/POIXMLTy......
  • Jmeter实现本地文件的读写操作-将响应结果写入到本地Excel中
    一、环境准备1、引入操作EXcel文件的包2、安装JMeter:确保已安装JMeter。Java环境:确保系统中已安装JDK,并配置了JAVA_HOME环境变量。二、脚本准备1.配置JMeter测试计划创建线程组添加线程组:右键点击“测试计划(TestPlan)”,选择“添加(Add)”->“线程(Threads(Use......
  • JAVA操作Excel使用poi和easyexcel依赖的兼容性问题
      EasyExcel版本3.1.0及以上支持poi5.2.3。具体来说,EasyExcel3.1.0及之后的版本兼容poi4.1.2至5.2.2的范围,因此它确实支持poi5.2.3。但请注意,使用3.0.0及以上版本的EasyExcel配合poi5+时,需要手动在项目的依赖管理中排除poi-ooxml-schemas依赖,示例如下:<dependency>......
  • AvalonMM接口Interval Timer IP的寄存器介绍和Interval Timer寄存器读写操作详解
    一、间隔定时器结构间隔定时器的结构框图: 该间隔定时器有如下两个特点:-Avalon-MM接口,提供对6个16位寄存器的访问;-有一个脉冲输出接口(可选),可用作周期性脉冲发生器;该间隔定时器的所有寄存器都是16位的,可兼容16-bit和32-bit处理器。某些寄存器只存在于特定的配置中,例如,当该......
  • easyExcel使用示例
    引入依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>4.0.1</version> </dependency>动态合并单元格 List<List<String>>head=newArrayList<>(......
  • AvalonMM接口PIO IP的介绍和PIO的读写操作详解
    一、PIO寄存器介绍Avalon®-MM主机外设(如CPU)通过四个32位寄存器控制并与PIO核通信,如下所示。该表假设PIO核的I/O端口被配置为n位宽度。以上截图来自IntelEmbeddedPeripheralsIPUserGuide。data寄存器如果将PIO硬件配置为输入或仅输入输出模式,则从数据读取将返回输入端......
  • 关于easyExcel解析未添加@ExcelProperty报错问题分析
    在一次做辅料商品导出列表的需求,并且上线之后发现,怎么商品列表的导出没有反应,一看日志,发现报错了: 原因:在做需求时,辅料商品导出用的时商品导出的接口,并且做了参数的转换。这里新加了两个字段用于做转换使用。因为之前很少用easyExcel,所以以为只要不加@ExcelProperty,easyExcel......
  • EasyExcel 单元格根据图片数量动态设置宽度
    在使用EasyExcel导出Excel时,如果某个单元格是图片内容,且存在多张图片,此时就需要单元格根据图片数量动态设置宽度。经过自己的研究和实验,导出效果如下:具体代码如下:EasyExcel版本<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactI......
  • EasyExcel简单使用教程(大量数据分批入库;非固定Excel解析)
    前言本文记录了如何使用EasyExcel完成简单的表格解析操作,同时实现了大量数据情况下数据的分次批量入库,并记录每条数据入库的状态,以便进行结果统计。固定模板及表数据格式的解析实现Excel模板内容对应的实体类importcom.alibaba.excel.annotation.ExcelIgnore;importcom.al......
  • 使用EasyExcel的AnalysisEventListener读取EXCEL导入数据
    1、实体对象VOimportcom.alibaba.excel.annotation.ExcelProperty;importlombok.Data;@DatapublicclassPrizeLogImportExcelVO{@ExcelProperty("订单编号")privateStringprizeSn;@ExcelProperty("快递公司")privateStringexpressN......