package com.**.cpic.util.excel;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import com.alibaba.fastjson.JSONObject;
import com.**.cpic.entity.Staff;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class ExcelUtil {
public List<ExcelRowSerializable> read(File file,RowBeanFactory<ExcelRowSerializable> beanFactory) {
Workbook workbook = getWorkbook(file);
Sheet sheet = workbook.getSheetAt(0);
// 获取文档中已保存数据的行数
int rowNum = sheet.getPhysicalNumberOfRows();
// 获取第一行
Row row = sheet.getRow(0);
// 获取当前行已保存数据的最大列数
int colnum = row.getPhysicalNumberOfCells();
List<ExcelRowSerializable> datas = new ArrayList<>(rowNum-1);
for (int i = 1; i < rowNum; i++) {
row = sheet.getRow(i);
if (null != row) {
ExcelRowSerializable rowBean = beanFactory.createBean();//创建对象
datas.add(rowBean);
for (int j = 0; j < colnum; j++) {
Cell cell = row.getCell(j);
rowBean.write(j, cell.getStringCellValue());//根据序列化设置参数值
}
}
}
return datas;
}
private static Workbook getWorkbook(File file) {// 根据后缀获取Excel表格
Workbook workbook = null;
String fileName = file.getName();
String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
try (InputStream intpuStream = new FileInputStream(file)) {
if ("xls".equals(suffix)) {
workbook = new HSSFWorkbook(intpuStream);
} else if ("xlsx".equals(suffix)) {
workbook = new XSSFWorkbook(intpuStream);
}
} catch (FileNotFoundException e) {
log.error("read excel error {}",e);
} catch (IOException e) {
log.error("read excel error {}",e);
}
return workbook;
}
public static void main(String args[]) {
ExcelUtil util = new ExcelUtil();
util.read(new File("C:\\workdoc","1.xlsx"),new RowBeanFactory<ExcelRowSerializable>() {
@Override
public ExcelRowSerializable createBean() {
return new Staff();
}
}).forEach(staff->{
Staff tempStaff = (Staff) staff;
System.out.println(JSONObject.toJSONString(tempStaff));
});
}
}