EasyPOI复杂表格导入
- 多表头数据导入
- 方式一
- 导入表格实体类
- 文件导入代码
- 测试结果
- 方式二
- 导入表格实体类
- 文件导入代码
- 测试结果
- 总结
- 设置表格从哪行读取表格内容
多表头数据导入
方式一
导入的表格样式如下
导入表格实体类
package com.demo.entity;import cn.afterturn.easypoi.excel.annotation.Excel;
import lombok.Data;import java.io.Serializable;@Data
public class SerailNum implements Serializable {/*** 序号*/@Excel(name = "序号")private String serialNum;
}
package com.demo.entity;import cn.afterturn.easypoi.excel.annotation.Excel;
import lombok.Data;import java.io.Serializable;@Data
public class BasicInfo implements Serializable {@Excel(name = "姓名")private String name;@Excel(name = "性别")private String gender;
}
package com.demo.entity;import cn.afterturn.easypoi.excel.annotation.ExcelEntity;
import lombok.Data;import java.io.Serializable;@Data
public class UserBO implements Serializable {@ExcelEntity(name = "序号")private SerailNum serailNum;@ExcelEntity(name = "基本信息")private BasicInfo basicInfo;
}
文件导入代码
package com.demo;import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import com.alibaba.fastjson2.JSON;
import com.demo.entity.UserBO;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;import java.io.FileInputStream;
import java.io.InputStream;
import java.util.List;@SpringBootTest
public class UserTest {@Testpublic void testImport() throws Exception {ImportParams params = new ImportParams();params.setTitleRows(1);//标题列占几行params.setHeadRows(1);//header列占几行// 字段真正值和列标题之间的距离 默认0行/***表格真正有值的行数离表格的标题列还差一行,如果表格列下的第一行为表格的实际内容,则不需要*设置 params.setStartRows(1);*/params.setStartRows(1);// 文件输入流读取数据InputStream inputStream = new FileInputStream("C:\\Users\\16837\\Desktop\\test\\social.xls");List<UserBO> userBOList= ExcelImportUtil.importExcel(inputStream,UserBO.class,params);System.out.println("导入数据");System.out.println(userBOList);}
}
测试结果
控制台输出
方式二
导入表格实体类
package com.demo.entity;import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.afterturn.easypoi.excel.annotation.ExcelEntity;
import lombok.Data;import java.io.Serializable;@Data
public class UserBO implements Serializable {@Excel(name = "序号")private String serialNum;@Excel(name = "姓名")private String name;@Excel(name = "性别")private String gender;
}
文件导入代码
package com.demo;import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import com.alibaba.fastjson2.JSON;
import com.demo.entity.UserBO;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;import java.io.FileInputStream;
import java.io.InputStream;
import java.util.List;@SpringBootTest
public class UserTest {@Testpublic void testImport() throws Exception {ImportParams params = new ImportParams();params.setTitleRows(1);//标题列占几行params.setHeadRows(1);//header列占几行// 字段真正值和列标题之间的距离 默认0行/***表格真正有值的行数离表格的标题列还差一行,如果表格列下的第一行为表格的实际内容,则不需要*设置 params.setStartRows(1);*/params.setStartRows(1);// 文件输入流读取数据InputStream inputStream = new FileInputStream("C:\\Users\\16837\\Desktop\\test\\social.xls");List<UserBO> userBOList= ExcelImportUtil.importExcel(inputStream,UserBO.class,params);System.out.println("导入数据");System.out.println(userBOList);}
}
测试结果
总结
方式一和方式二,不同之处在于导入表格实体的设计,方式一是通过@ExcelEntity
来映射合并的表格列,方式二是直接通过 @Excel
来映射要读取的表格列,然后在导入的时候,设置表格真正要读取的表格列和表格字段真正值从哪行读取
设置表格从哪行读取表格内容
通过ImportParams
设置startRows