前言:
第一次启动excel导入时,每当需要导入新的Excel文件时,都必须重新创建相应的工具以导入Excel。所以我很苦恼,认为有必要使用万能引进的Excel工具。(威廉莎士比亚,Excel工具,Northern Exposure)。
private final static string xls=' xls ';
private final static string xlsx=' xlsx ';
Public static mapstring、object readexcelpoit(object obj)throws exception
{
//fileinputstream fis=(文件inputstream)();
Mapstring,object JSON object=new hashmap();
字串msg=null
list string msg list=new ArrayList();
//创建输入流
file inputstream fis=new file inputstream(new file(' g : \ \ data \ \;));
//通过构造函数传递参数
workbook workbook=getworkbookt(new file(' g : \ \ data \ \;));
//workbook workbook=getworkbook(文件);
int sheets=workbook . getnumberofsheets();
If(图纸1) {
Msg='内容为空';
m(MSG);
J('msg ',msg list);
Return jsonObject
}
//获取任务标记名称
//for(int I=0;IsheetsI ){
//Sy(I);
//
//}
//获取工作表中的第一个工作表
sheet sheet=workbook . get sheet at(0);
//获取行。行号作为参数传递给getRow方法,第一行从0开始计算
//汇入第一行
int firstRowNum=()2;
//获取第一行中的第一个值,并确认它是所需的值
row row 1=(firstRowNum);
row row 2=(first row num-1);
class cl=obj . get class();
field[]fs=cl . getdeclaredfields();
string builder string builder=new string builder();
For (field f3360fs) {
If ()==0){
());
}else {
(',');
());
}
}
string contains in=();
if(row 1==空){
Msg='内容为空';
m(MSG);
J('msg ',msg list);
Return jsonObject
}
//检查必填字段是否存在
int cellNum=-1;
shortrow num=row 2 . getlastcellnum();
for(int I=0;IrowNumI ){
cell cell 1=row 2 . getcell(I);
cell 1 . setcelltype);
If(单元1!=空){
stringcellvalue=cell 1 . getstringcellvalue();
If(!Con(储存格值){
cell num=I;
布雷克;
}
}
}
If (cellNum!=-1){
Msg=
4;不存在需要的字段"; m(msg); j("msg",msgList); return jsonObject; } //最后 一列 // short lastCellNum = row.getLastCellNum(); //最后一行 Integer sheetLastRowNum = (); List<Object> list = new ArrayList<>(); if (sheetLastRowNum<1){ msg="数据行不存在"; m(msg); } for (int i=firstRowNum+1;i<sheetLastRowNum+1;i++){ //获取第i行 Row row = (i); //获取该列 Cell cell1 = null; if (row!=null){ Object object = obj.getClass().newInstance(); BeanU(obj,object); for (int j=0;j<rowNum;j++){ cell1 = row.getCell(j); // String cellValue = row1.getCell(j).getStringCellValue(); String cellValue = row2.getCell(j).getStringCellValue(); if (cell1==null){ msg="第"+i+"行第"+(j+1)+"列值为空"; m(msg); break; } if (cell1!=null){ cell1.setCellType); if (con(cellValue)){ String value = cell1.getStringCellValue(); Class cal = Cu; Field field = cal.getDeclaredField(cellValue); (true); (object,value); } } } Object o =Anno(object).get("result"); if (o)){ li(object); } } } logger.warn("msgList={}",msgList); j("list",list); j("msg",msgList); workbook.close(); (); return jsonObject; } public static Workbook getWorkBookT(File file) { //获得文件名 // String fileName = (); String fileName = (); //创建Workbook工作薄对象,表示整个excel Workbook workbook = null; try { //获取excel文件的io流 // InputStream is = (); FileInputStream is = new FileInputStream(file); //根据文件后缀名不同(xls和xlsx)获得不同的Workbook实现类对象 i(xls)){ //2003 workbook = new HSSFWorkbook(is); }else i(xlsx)){ //2007 workbook = new XSSFWorkbook(is); } } catch (IOException e) { logger.info()); } return workbook; }Excel导入规则:
注释:前三行不被读取 | 第二行内容字段与接收实体类字段相同 | -- |
name | phone | address |
姓名 | 手机号 | 地址 |
张三 | 11011011000 | 杭州 |
本次demo中,前三行是被忽略的。第二行的字段与接受的实体类相对应。 |
如上:只需实体类中用name,phone,address就能接收到姓名为张三 手机号为 11011011000 地址为杭州
ps:
这里我们只对第一张Excel表进行了处理,需要对所有表进行处理的可自行修改
1.《【poi怎么设置excel】使用POI和反射导入Excel自动识别图元类》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《【poi怎么设置excel】使用POI和反射导入Excel自动识别图元类》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/2516268.html