将excel中的数据转化为对象

1、excel中的数据:一行一行的去读,即一行就是一个对象,还有就是:excel中的列要与javabean 中的属性相对应
2、其中需要注意的是:取得单元格的值时需要转化格式
3、用到的一些包:

import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.DataFormatter;

import java.io.FileInputStream;
import java.io.IOException;
import java.lang.reflect.Field;

具体代码:

private List<OptimizationStringApi> getExcelStringObject(){
		HSSFWorkbook wb=null;
		HSSFSheet sheet=null;
		FileInputStream fw=null;
		/*要想把excel中的每一行数据转换成javabean对象则用反射技术
		 * javabean中的属性个数要与excel中的列数一样,不然可能报错,属性顺序与列的顺序也要一样
		 * */
		try{
			fw=new FileInputStream("src/test/resources/organization/requestData/optimizationTests.xls"); //C:\Users\lin\stagingtest\backend-ft\src\test\resources\portfolio\template
			POIFSFileSystem fs=new POIFSFileSystem(fw);
			wb=new HSSFWorkbook(fs);
			fw.close();
		}catch(IOException e){
			e.printStackTrace();
		}finally{
			if(fw!=null){
				try {
					fw.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		HSSFRow row=null;
		List<OptimizationStringApi> dataList=new ArrayList<OptimizationStringApi>();
		for(int i=0;i<wb.getNumberOfSheets();i++){
			//循环excel中所有的 sheet
			sheet=wb.getSheetAt(i);
			for(int j=1;j<sheet.getPhysicalNumberOfRows();j++){
				//循环每一个sheet中的每一行
				row=sheet.getRow(j);
				System.out.println("循环到了excel的行数:" + j);
				OptimizationStringApi optimizationStringApi=new OptimizationStringApi();
				Field[] beanFiled=optimizationStringApi.getClass().getDeclaredFields();
				for(int z=0;z<row.getLastCellNum();z++){
					//循环每一行中的所有列,就是得到单元格中的数据
					try {
						//强制反射,让private 的属性也可以访问
						beanFiled[z].setAccessible(true);
						//把得到的属性进行赋值,就是把读取到的单元格中的数据赋给对应的属性
						DataFormatter formatter = new DataFormatter();
						beanFiled[z].set(optimizationStringApi, formatter.formatCellValue(row.getCell(z)));
					} catch (IllegalArgumentException e) {
						e.printStackTrace();
					} catch (IllegalAccessException e) {
						e.printStackTrace();
					}
				}
				dataList.add(optimizationStringApi);
			}
		}
		for(OptimizationStringApi p : dataList){
			System.out.println(p.toString());
		}
		return dataList;
	}
	```
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值