wordpress站点很慢品牌网站建设教程
EasyExcel导入/导出Excel文件简单写法
 1、导入依赖
 2、创建简单导入、导出demo
 3、创建类 继承AnalysisEventListener(导入Excel监听解析表格数据)
 4、创建类 基于注解 自定义Excel导出模版
1、导入EasyExcel依赖
         
         <!--导入EasyExcel依赖-->
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>easyexcel</artifactId>
             <version>3.0.5</version>
         </dependency>
2、创建简单导入、导出demo
import com.alibaba.excel.EasyExcel;
 import com.google.common.collect.Lists;
import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
/**
  * @ClassName ExcelTest
  * @Descripition easyExcel 导入/导出
  * @Author admin
  * @Date 2023/10/9 13:56
  */
 public class ExcelTest {
public static void main(String[] args) {
ExcelTest excelTest = new ExcelTest();
        // easyExcel 导入Excel表格简单 : Demo
         excelTest.excelReadUtil();
        // easyExcel 导出Excel表格简单 : Demo
         excelTest.excelWriteUtil();
}
     /**
      * easyExcel 导入Excel表格简单 : Demo
      */
     public void excelReadUtil() {
        // Excel文件地址(自定义个excel文件夹)
         String fileName = "D:\\test\\test001\\desktop\\excel_test.xlsx";
         //记录开始读取Excel时间,也是导入程序开始时间
         long startReadTime = System.currentTimeMillis();
         System.out.println("------开始读取Excel的Sheet时间(包括导入数据过程):" + startReadTime + "ms------");
         //读取所有Sheet的数据.每次读完一个Sheet就会调用这个方法
         /*List<Object> list = EasyExcel.read(fileName, new CustomListener()).headRowNumber(1).doReadAllSync();
         for (Object o : list) {
             System.out.println(o);
         }*/
        // EasyExcel.read(fileName).doReadAll();
         // 多sheet页读取(所有的sheet页)
         // EasyExcel.read(fileName, new CustomListener()).doReadAll();
         // 读取第一个sheet页
         EasyExcel.read(fileName, new CustomListener()).sheet().doRead();
         long endReadTime = System.currentTimeMillis();
         System.out.println("------结束读取Excel的Sheet时间(包括导入数据过程):" + endReadTime + "ms------");
         System.out.println("------读取Excel的Sheet时间(包括导入数据)共计耗时:" + (endReadTime - startReadTime) + "ms------");
}
Excel导入截图:

控制台输出截图:

     /**
      * easyExcel 导出Excel表格简单 : Demo
      */
     public void excelWriteUtil() {
         //1、创建一个文件对象
         File excelFile = new File("D:\\test\\test001\\desktop\\excel_test1001.xlsx");
         //2、判断文件是否存在,不存在则创建一个Excel文件
         if (!excelFile.exists()) {
             try {
                 excelFile.createNewFile();//创建一个新的文件
             } catch (IOException e) {
                 e.printStackTrace();
             }
         }
         //3、指定需要那个class去写。然后写到第一个sheet,名字为模版,然后文件流会自动关闭
         EasyExcel.write(excelFile, ExcelTemplate.class).sheet("订单模版").doWrite(queryToExcel());
     }
     /**
      * 1、查询数据库获取导出的数据集合
      * 2、集合转换导出模版实体集合:ExcelTemplate
      *
      * @return
      */
     public List<ExcelTemplate> queryToExcel() {
         // 1、查询数据库获取导出的数据集合
         // 模拟业务代码,获取数据集
         List<ExcelTemplate> orders = Lists.newArrayList();
         for (int i = 0; i < 50; i++) {
             ExcelTemplate template1 = new ExcelTemplate(1000L + i, "订单01" + i, "商品名称" + i, "sk1001" + i, 36L + i, 50L + i, "收件人" + i, "北京科技园" + i);
             orders.add(template1);
         }
        // 2、集合转换导出模版实体集合:ExcelTemplate
         List<ExcelTemplate> excels = new ArrayList<>();
         //遍历数据集,导出Excel
         for (int i = 0; i < orders.size(); i++) {
             ExcelTemplate order = orders.get(i);
             ExcelTemplate data = new ExcelTemplate();
             data.setOrderNum(order.getOrderNum());
             data.setOrderName(order.getOrderName());
             data.setGoodsName(order.getGoodsName());
             data.setGoodsNum(order.getGoodsNum());
             data.setPrice(order.getPrice());
             data.setNum(order.getNum());
             data.setUserName(order.getUserName());
             data.setAddress(order.getAddress());
             excels.add(data);
         }
         return excels;
     }
}
Excel导出截图:

3、创建类 继承AnalysisEventListener(导入Excel监听解析表格数据)
import com.alibaba.excel.context.AnalysisContext;
 import com.alibaba.excel.event.AnalysisEventListener;
 import com.alibaba.excel.read.listener.ReadListener;
 import com.alibaba.fastjson.JSON;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
 import org.assertj.core.util.Lists;
import java.util.List;
 import java.util.Map;
/**
  * @ClassName CustomListener
  * @Descripition 导入Excel监听解析表格数据
  * @Author admin
  * @Date 2023/10/9 15:40
  */
 @Slf4j
 public class CustomListener extends AnalysisEventListener {
    // 处理数据: 分批导入阈值
     private static final Long size = 8L;
    // private List<Map<String, String>> list = Lists.newArrayList();
     private List<Object> list = Lists.newArrayList();
     // 每解析一行数据,该方法会被调用一次
     @Override
     public void invoke(Object o, AnalysisContext analysisContext) {
         log.info("Excel每解析一行数据,该方法(invoke)会被调用一次 data : {}", JSON.toJSONString(o));
         // int size = analysisContext.readRowHolder().getCellMap().entrySet().size();
         // System.out.println(size);
        list.add(o);
         if(list.size() >= CustomListener.size){
             for (Object o1 : list) {
                 System.out.println(o1);
             }
             System.out.println("处理数据: 分批导入阈值: " + size);
             System.out.println();
             System.out.println();
             list.clear();
         }
     }
     // 全部解析完成被调用
     @Override
     public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        System.out.println("最后剩余数据;不够分割 长度 : " + list.size());
         if(CollectionUtils.isNotEmpty(list)){
             for (Object o : list) {
                 System.out.println(o);
             }
             System.out.println();
             list.clear();
         }
         System.out.println("解析数据完成!!!");
         // System.out.println("解析数据完成!!!");
     }
 }
4、创建类 基于注解 自定义Excel导出模版
import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.write.style.*;
 import com.alibaba.excel.enums.poi.BorderStyleEnum;
 import com.alibaba.excel.enums.poi.FillPatternTypeEnum;
 import com.alibaba.excel.enums.poi.HorizontalAlignmentEnum;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import org.apache.poi.ss.usermodel.FillPatternType;
 import org.apache.poi.ss.usermodel.HorizontalAlignment;
/**
  * @ClassName ExcelTemplate
  * @Descripition 导出模版
  * @Author admin
  * @Date 2023/10/9 18:14
  */
 @Data
 @AllArgsConstructor
 @NoArgsConstructor
 @HeadRowHeight(value = 50) // 头部行高
 @ContentRowHeight(value = 25) // 内容行高
 @ColumnWidth(value = 25) // 列宽
 // 头背景设置成红色 IndexedColors.RED.getIndex()
 // @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 10)
 // 头字体设置成20, 字体默认宋体
 @HeadFontStyle(fontName = "仿宋", fontHeightInPoints = 20)
 // 头部边框实线
 @HeadStyle(borderTop = BorderStyleEnum.THICK,
         borderBottom = BorderStyleEnum.THICK,
         borderLeft = BorderStyleEnum.THICK,
         borderRight = BorderStyleEnum.THICK)
 // 内容的背景设置成绿色  IndexedColors.GREEN.getIndex()
 // @ContentStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 17)
 // 内容字体设置成20, 字体默认宋体
 @ContentFontStyle(fontName = "楷体", fontHeightInPoints = 20)
 // Excel设置内容字体是否水平居中、边框实线
 @ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER,
         borderTop = BorderStyleEnum.MEDIUM,
         borderBottom = BorderStyleEnum.MEDIUM,
         borderLeft = BorderStyleEnum.DOUBLE,
         borderRight = BorderStyleEnum.DOUBLE)
 public class ExcelTemplate {
     // 字符串的头背景设置成粉红 IndexedColors.PINK.getIndex()
     // @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 14)
     // 字符串的头字体设置成20
     // @HeadFontStyle(fontHeightInPoints = 20)
     // 字符串的内容背景设置成天蓝 IndexedColors.SKY_BLUE.getIndex()
     // @ContentStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 40)
     // 字符串的内容字体设置成20,默认宋体
     // @ContentFontStyle(fontName = "宋体", fontHeightInPoints = 20)
     // 设置是否水平居中
     // @ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.LEFT)
     @ExcelProperty("订单编码")
     private Long orderNum;
    @ExcelProperty("订单名称")
     private String orderName;
    @ExcelProperty("商品名称")
     private String goodsName;
    @ExcelProperty("商品编码")
     private String goodsNum;
    @ExcelProperty("价格")
     private Long price;
    @ExcelProperty("数量")
     private Long num;
    @ExcelProperty("用户名称")
     private String userName;
    @ColumnWidth(value = 80) // 列宽
     @ExcelProperty("收货地址")
     private String address;
 }
  
