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 {
@Test
public 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 {
@Test
public 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