JAVA笔记——将excel解析为对象(通用模板)

环境

使用到poi库
1. poi.jar
2. poi-ooxml.jar
3. poi-ooxml-schemas.jar
4. xmlBean.jar

下载地址:poi-3.13.zip

代码

以下代码可以直接拷贝使用即可

package com.gszh.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;


/**
 * excel帮助类
 * @author 周君
 *
 */
public class ExcelHelper {

    /**
     * 将excel解析为指定的对象集合 
* 例如: 要导入的excel格式为
* 第1行: | id | username | password |(与对象的字段对应)
* 第2行: |1 | 小周   | 123456 |
* 第3行: |2 | 老王   | 123456 |
* 调用: analysisExcel(file,User.class); * @param file-----要解析的excel文件 * @param c--------指定的对象类型 * @throws IOException * @return---------对象集合 */
public static List analysisExcel(File file,Class c) { List list = new ArrayList(); InputStream inputStream = null; String fileName = null; Workbook wb = null; try{ inputStream = new FileInputStream(file); fileName = file.getName(); if(fileName.endsWith(".xls") || fileName.endsWith(".xlsx")){ //如果是2003版本 if(fileName.endsWith(".xls")){ //1.先解析文件 POIFSFileSystem fs = new POIFSFileSystem(inputStream); wb = new HSSFWorkbook(fs); }else if( fileName.endsWith(".xlsx")){//如果是2007以上版本 wb = new XSSFWorkbook(inputStream); }else{ return null; } } }catch(IOException e){ e.printStackTrace(); } Sheet sheet = wb.getSheetAt(0); //获取第一行(标题行) Row row1 = sheet.getRow(0); //总列数 int colNum = row1.getPhysicalNumberOfCells(); //总行数 int rowNum = sheet.getLastRowNum(); //将标题行一一放入数组 String[] titles = new String[colNum]; for(int i = 0 ; i < colNum ; i++){ titles[i] = row1.getCell(i).getStringCellValue(); } //获取指定对象所有的字段 Field fields[] = c.getDeclaredFields(); Map fieldMap = new HashMap(); for (int i = 0; i < fields.length; i++) { fieldMap.put(fields[i].getName(), fields[i]); } //使用反射机制,将值存入对应对象中 try { for (int i = 1; i < rowNum+1; i++) { T t =c.newInstance(); for (int j = 0; j < titles.length; j++) { //当excel中有这个字段 if(fieldMap.containsKey(titles[j])){ String fieldName = titles[j]; String methodName = "set" + fieldName.substring(0,1).toUpperCase()+fieldName.substring(1); //调用该字段对应的set方法 Class cc = fieldMap.get(titles[j]).getType(); Method method = c.getMethod(methodName, cc); String value = String.valueOf(sheet.getRow(i).getCell(j)); method.invoke(t, parseValue(value, cc)); } } list.add(t); } } catch (Exception e) { e.printStackTrace(); } return list; } /** * 将字符串转化为指定类型的对象 * @param s----要转化的字符串 * @param c----目标对象类型 * @return */ private static Object parseValue(String s,Class c){ Object obj = null; String className = c.getName(); //excel中的数字解析之后可能末尾会有.0,需要去除 if(s.endsWith(".0")) s = s.substring(0, s.length()-2); if(className.equals("java.lang.Integer")){ //Integer obj = new Integer(s); }else if(className.equals("int")){ //int obj = (int)Integer.parseInt(s); }else if(className.equals("java.lang.String")){ //String obj = s; }else if(className.equals("java.lang.Double")){ //Double obj = new Double(s); }else if(className.equals("double")){ //double obj = (double)new Double(s); }else if(className.equals("java.lang.Float")){ //Float obj = new Float(s); }else if(className.equals("float")){ //float obj = (float)new Float(s); }else if(className.equals("java.util.Date")){ //Date SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); try { obj = sdf.parse(s); } catch (ParseException e) { e.printStackTrace(); } }else if(className.equals("long")){ //long obj = Long.parseLong(s); }else if(className.equals("java.util.Long")){ //Long obj = new Long(s); } return obj; } }

使用

准备excel

JAVA笔记——将excel解析为对象(通用模板)_第1张图片

excel中第一行要和你要解析的目标对象字段名称一致。
例如:你要将以上excel解析为User对象,那么User对象定义如下:

public class User {

    private long userId;            //用户id
    private String username;        //用户名

    public long getUserId() {
        return userId;
    }
    public void setUserId(long userId) {
        this.userId = userId;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }

}

调用代码

List users = ExcelHelper.analysisExcel(file, User.class);

你可能感兴趣的:(JAVA)