import org.apache.log4j.Logger;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import javax.servlet.http.HttpServletRequest;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class ExcelUtils {
/**
* @Description: 传入 输入流InputStream 返回数据列表list
* @Author: vdi100
* @CreateDate: 2019/3/29 16:55
* @Version: 1.0
*/
public static <T> List<T> excelToList(Class<T> clazz, InputStream is, String excelFileName) {
List<T> list = new ArrayList<>();
try {
//创建工作簿
Workbook workbook = createWorkbook(is, excelFileName);
System.out.println("workbook:"+workbook);
//创建工作表sheet
Sheet sheet = getSheet(workbook, 0);
//获取sheet中数据的行数
int rows = sheet.getPhysicalNumberOfRows();
//获取表头单元格个数
int cells = sheet.getRow(1).getPhysicalNumberOfCells();
//利用反射,给JavaBean的属性进行赋值
Field[] fields = clazz.getDeclaredFields();
for (int i = 1; i < rows; i++) {//第一行为标题栏,从第二行开始取数据
Row row = sheet.getRow(i);
int index = 0;
T object = clazz.getConstructor(new Class[]{}).newInstance(new Object[]{});
while (index <= cells) {
Cell cell = row.getCell(index);
if (null == cell) {
cell = row.createCell(index);
}
String value = null;
if (Cell.CELL_TYPE_NUMERIC == cell.getCellType()) {
if (DateUtil.isCellDateFormatted(cell)) {
//用于转化为日期格式
Date d = cell.getDateCellValue();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd" );
value = df.format(d);
} else {
cell.setCellType(Cell.CELL_TYPE_STRING);
value = null == cell.getStringCellValue() ? "" : cell.getStringCellValue();
}
} else {
cell.setCellType(Cell.CELL_TYPE_STRING);
value = null == cell.getStringCellValue() ? "" : cell.getStringCellValue();
}
if(index < fields.length) {
Field field = fields[index];
String fieldName = field.getName();
String methodName = "set" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
Method setMethod = clazz.getMethod(methodName, new Class[]{String.class});
setMethod.invoke(object, new Object[]{value});
}
index++;
}
if (isHasValues(object)) {
list.add(object);
}
}
} catch (Exception e) {
System.out.println("e:"+e);
logger.error(e);
} finally {
try {
is.close();//关闭流
} catch (Exception e2) {
System.out.println("e2:"+e2);
logger.error(e2);
}
}
return list;
}
}