本帖最后由 大山哥哥 于 2017-5-31 21:54 编辑
本次抽取的工具类是根据传入的excel文件路径和要将该文件读取后封装的实体类Class、字段名称,将excel中的数据封装到实体集合中。
[Java] 纯文本查看 复制代码 /**
* @param path excel文件路径
* @param clazz 要封装的实体类Class对象
* @param args 字段名称
*/
public List importXls(String path,Class clazz,String ...args){
List<Object> list = new ArrayList<Object>();
try {
//返回结果数据集合
Object realObj = clazz.newInstance();
Sheet sheet = getExcelSheet(path);
for (Row row : sheet) {
System.out.println(row.getRowNum() + "----" +row);
if(row.getRowNum() > 0){
for (int i = 0; i < args.length; i++) {//传入的参数列表进行遍历"id","username","gender"
//读取Cell
Field field = clazz.getDeclaredField(args[i]);
field.setAccessible(true);
// field.getType();
Cell cell = row.getCell(i);//得到当前行的第i+1个Cell
String cellValue = getCellStringValue(cell);//此处将所有类型都转换成了字符串进行处理
field.set(realObj, cellValue);
}
list.add(realObj);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
[Java] 纯文本查看 复制代码 /**
* 根据不同的文件后缀名得到不同版本的Workbook对象,返回其sheet对象
* @param filePath
* @return
* @throws Exception
*/
private Sheet getExcelSheet(String filePath) throws Exception {
// 1、加载Excel文件
Workbook workbook = null;
if(filePath.matches("^.+\\.(?i)(xls)$")){
workbook = new HSSFWorkbook(new FileInputStream(filePath));//xls后缀
}else if(filePath.matches("^.+\\.(?i)(xlsx)$")){
workbook = new XSSFWorkbook(new FileInputStream(filePath));//
}
// 2、加载第一个sheet页
Sheet sheet = workbook.getSheetAt(0);
return sheet;
}
[Java] 纯文本查看 复制代码 /**
* 获取表格内数据
* @param cell
* @return
*/
private String getCellStringValue(Cell cell) {
String cellValue;
switch (cell.getCellType())
{
case Cell.CELL_TYPE_NUMERIC: // 数字
cellValue = (int)cell.getNumericCellValue() + "";
break;
case Cell.CELL_TYPE_STRING: // 字符串
cellValue = cell.getStringCellValue();
break;
case Cell.CELL_TYPE_BOOLEAN: // Boolean
cellValue = cell.getBooleanCellValue() + "";
break;
case Cell.CELL_TYPE_FORMULA: // 公式
cellValue = cell.getCellFormula() + "";
break;
case Cell.CELL_TYPE_BLANK: // 空值
cellValue = "";
break;
case Cell.CELL_TYPE_ERROR: // 故障
cellValue = "非法字符";
break;
default:
cellValue = "未知类型";
break;
}
return cellValue;
}
main方法测试:
public static void main(String[] args) {
new ExcelUtil().importXls("f:/User.xlsx", new User().getClass(), "id","username","gender");
}
|
|