通用可配置 POI 导入EXCEL

主要方法:
public boolean readExcelWriteData(InputStream inp,String year,String month) throws Exception
	{   
	    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
	    Workbook wb = WorkbookFactory.create(inp);   
	    //获取第一张表   
	    Sheet st = wb.getSheetAt(0);   
	    //获取行数   st.getLastRowNum();   
	    Cell cell=null;
	    Tydbzbtx attinfo=null;
	    boolean flag=true;
	    boolean lastflag=true;
	    int cellLength=0;
	    int num=0;
	    String head=null;
	    <strong>String []tydbtxHeader=null;//标题字段列
	    String []tydbtxValue=null;//标题对应内容列
</strong>	    //遍历第一张表的所有行
	    Row r0=st.getRow(1);//标题行。用来根据中文标题来判断字段,很重要
	    cellLength=r0.getLastCellNum();//列个数
	    tydbtxHeader=new String[cellLength];
        tydbtxValue=new String[cellLength];
	    for(int i=0;i<=st.getLastRowNum();i++)
	     {   
	        //第一行一般为title不读取 ,视具体文档格式来定  
	        if(i!=0&&i!=1)
	        {   
	            Row row = st.getRow(i); //获取第一行数据   
	            System.out.println(row.getLastCellNum());
	            //遍历第一行所有的列(单元格)   
	            try
	            {
	            	
	            if(null!=row&&null!=row.getCell(0))
	  	           {

		            cell = row.getCell(0);
		            cell.setCellType(Cell.CELL_TYPE_NUMERIC);
		            tydbtxHeader[0]="0";
		            tydbtxValue[0]=String.valueOf(cell.getNumericCellValue());//序号
           
		            cell = row.getCell(1);
		            cell.setCellType(Cell.CELL_TYPE_STRING);
		            tydbtxHeader[1]="STB_DEPART_ID";
		            tydbtxValue[1]=getDepartIdByName(cell.getStringCellValue());//单位
		         
		            //遍历表格列
		            for(int j=2;j<cellLength;j++)
		            {
		            	cell = row.getCell(j);
		            	
		            	if(null==cell)
		            	{
		            		
		            	}else
		            	{
		            		
			            cell.setCellType(Cell.CELL_TYPE_STRING);
		            	
		            	}
			            head=r0.getCell(j).toString();
			            System.out.println(util.tydbtxMap.get(head));
			            System.out.println(r0.getCell(j));
			            if(null!=<strong>util.tydbtxMap.get(r0.getCell(j).toString()))//</strong>获取表头第一行,根据标题字段获取数据库字段名称
			            {
			            	tydbtxHeader[j]=util.tydbtxMap.get(r0.getCell(j).toString());//获取对应数据库字段
			            	tydbtxValue[j]=(cell==null)?null:cell.getStringCellValue();//获取对应数据库字段的值
			            	System.out.println(checkExcelData( year, month, tydbtxValue[1],tydbtxHeader[j]));
			            	if(!"".equalsIgnoreCase(checkExcelData( year, month, tydbtxValue[1],tydbtxHeader[j])))
			            	{
			            		num=updateExcelData(year,month,tydbtxValue[1],tydbtxHeader[j]);//存在就清除
			            	    if(num<=0)
			            	    {
			            	    	lastflag=false;
			            	    	break;
			            	    }	
			            	};
			            	
			            }   
		            }
		            num=saveExcelData(tydbtxHeader,tydbtxValue,year,month);
		           
		            if(num<=0)
		            {
		            	lastflag=false;
		            	break;
		            	
		            }else
		            {
		            	lastflag=true;
		            }
	  	         }
	            }catch(Exception ex)
	            {
                      System.out.print(ex);
	            }
	        }    
	     }
	    
	    if(lastflag)
	    {
	    	return true;
	    }else
	    {
	    	return false;	
	    }  
	}  


主要思路是通过一个map来配置要上传的excel表格标题,再用两个数组,String []tydbtxHeader=null;//标题字段列 String []tydbtxValue=null;//标题对应内容列

分别存放,从map中取到的数据库的字段名称,以及要保存的字段值。再遍历数组,保存数据库,不同的excel模板,只需要配置map即可

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值