这里写自定义目录标题
获取execl信息转java对象
工具包
/**
* excel中端设备 转成对象
* @param fileInputStream
* @return
* @throws IOException
*/
public static List<MgrDtuEnd> getEndList(MultipartFile fileInputStream) throws IOException {
List<MgrDtuEnd> list=new ArrayList<>();
XSSFWorkbook workbook = new XSSFWorkbook(fileInputStream.getInputStream());
//获取到第一个表
Sheet sheet = workbook.getSheetAt(0);
//计算所有长度
int rowCount = sheet.getPhysicalNumberOfRows();
//遍历这个表,遍历行
for (int rowNum=6;rowNum<rowCount;rowNum++){
Row row = sheet.getRow(rowNum);
int cellCount = row.getPhysicalNumberOfCells();
StringBuffer stringBuffer = new StringBuffer();
MgrDtuEnd mgrDtuEnd=new MgrDtuEnd();
//遍历列
for (int cellNum=0;cellNum<cellCount;cellNum++){
Cell cell = row.getCell(cellNum);
//
stringBuffer.append(cell.getStringCellValue()).append(";");
// System.out.println("["+rowNum+":"+cellNum+"]");
}
String result=stringBuffer.toString();
// System.out.println(result);
String[] strings=result.split(";");
// System.out.println(Arrays.toString(strings));
try{
mgrDtuEnd.setDeviceName(strings[0]);
mgrDtuEnd.setSn(strings[1]);
mgrDtuEnd.setManufacture(strings[2]);
mgrDtuEnd.setDeviceCategory(strings[3]);
mgrDtuEnd.setDeviceType(strings[4]);
mgrDtuEnd.setDeviceMajor(strings[5]);
mgrDtuEnd.setRegion(strings[6]);
mgrDtuEnd.setEdgeSn(strings[7]);
System.out.println(mgrDtuEnd.toString());
if (mgrDtuEnd!=null)
list.add(mgrDtuEnd);
}catch (ArrayIndexOutOfBoundsException e){
return list;
}
}
return list;
}
实体类
package com.hinner.pojo;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
*
* </p>
*
* @author zhoubin
* @since 2021-06-02
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("tbl_mgr_dtu_end")
public class MgrDtuEnd implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 设备ID,唯一,由物管平台自动生成
*/
@TableId(value = "device_id", type = IdType.AUTO)
private Integer deviceId;
/**
* 设备标识SN
*/
private String sn;
/**
* 所属边设备的SN
*/
private String edgeSn;
/**
* 设备名称
*/
private String deviceName;
/**
* 厂家名称
*/
private String manufacture;
/**
* 设备类型
*/
private String deviceCategory;
/**
* 设备型号
*/
private String deviceType;
/**
* 设备专业
*/
private String deviceMajor;
/**
* 地域
*/
private String region;
/**
* 1-在线 0-掉线
*/
private Boolean status;
/**
* 在线状态的最新更新时间
*/
private Date latestUpdateTime;
}
踩的坑
poi包中的
Row row = sheet.getRow(rowNum);
//获取所有行数
int cellCount = row.getPhysicalNumberOfCells();
这个方法显示的是已经创建过的行数,而不是有数据的行数!!!
什么叫创建过呢?就是进去excel表中,随便单元格写点东西,他会读到有东西的那一行;
就算那个单元格删掉了,他也是算已经创建了的,删掉后,还是会读取到那一行的所有行数;