主要方法:
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即可