导入方式优化

导入的方式如果加上反射是什么样子呢?

如下:

	private static List<Object> readExcel2003(FileInputStream fins, ImportParams params, String[] colunName, String[] headerName,Class clazz) throws IOException, InstantiationException, IllegalAccessException {
		List<Object> lists = new ArrayList<>();
		HSSFWorkbook hwb = new HSSFWorkbook(fins);
		HSSFSheet sheet = hwb.getSheetAt(0);
		HSSFRow row = sheet.getRow(params.getStartRows());
		HSSFCell cell = row.getCell(params.getCellNum());
		boolean flag = true;
		int totalNum = 0;
		int rowNum = 0;
		if (cell == null) {
			return lists;
		}
		for (int i = 0; i < hwb.getNumberOfSheets(); i++) {
			Sheet sheetData = hwb.getSheetAt(i);
			if (sheetData == null) {
				continue;
			}
			/*统计导入的总条数,要是你的excell包含了表头,就不用加1了*/
			if (sheetData.getLastRowNum() > 0) {
				totalNum += sheetData.getLastRowNum();
			}
			rowNum = row.getPhysicalNumberOfCells();
			Row rowsHeader = sheetData.getRow(0);
			for (int k = 0; k < rowNum; k++) {
				Cell cellData = rowsHeader.getCell(k);
				if (!cellData.toString().equals(headerName[k])) {
					flag = false;
				}
			}
			if (flag) {
				/*遍历行,这里j的初始值取1是因为我的表格里第一行是表头*/
				for (int j = 1; j < sheetData.getPhysicalNumberOfRows(); j++) {
					Cell cellData = null;
					JSONObject jsonObject = new JSONObject();
					for (int k = 0; k < rowNum; k++) {

						Row rows = sheetData.getRow(j);
						/*解析列,下标从0开始*/
						cellData = rows.getCell(k);
						jsonObject.put(colunName[k], cellData.toString());
						if (cellData == null) {
							continue;
						}
					}
					Field[] fields = clazz.getDeclaredFields();
					Object obj = clazz.newInstance();
					for (Field f:fields){
						Object val = TypeUtils.cast(jsonObject.get(f.getName().toString()),f.getType(),null);
						f.setAccessible(true);
						f.set(obj,val);
					}
					System.out.println(obj.toString());
					lists.add(obj);
				}
			}

		}
		return lists;
	}

Field[] fields = clazz.getDeclaredFields();
Object obj = clazz.newInstance();
for (Field f:fields){
Object val = TypeUtils.cast(jsonObject.get(f.getName().toString()),f.getType(),null);
f.setAccessible(true);
f.set(obj,val);
}
System.out.println(obj.toString());
lists.add(obj);

不过我觉得返回List与返回JSONArray是一样的结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值