ExcelUtlis将execl文件中的内容存储到java对象中

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/csdnwodeboke/article/details/80020691

        很多时候会涉及到execl上传,如果使用数字取标示每一个单元格,日后维护起来将非常麻烦。

        如果将execl单元格中的内容放到List<javaBean>中,一个javaBean对应一行execl中的内容,这样操作execl会很方便。

以后要在execl中添加某一列,对应地在javaBean中添加对应的字段即可。代码维护起来十分方便。


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;
import org.springframework.web.multipart.MultipartFile;

import java.beans.PropertyDescriptor;
import java.io.File;
import java.io.FileInputStream;
import java.lang.reflect.Field;
import java.util.LinkedList;
import java.util.List;


public class ExcelUtlis {
    /**
     * 
     * @param file          execl文件
     * @param sheetClazz    对应的实体类
     * @param num           读取execl的起始行的索引
     * @param columnNum     读取execl的列数
     * @param <T>
     * @return
     * @throws Exception
     */
    public static <T>List<T> getExcelListData(MultipartFile file, Class sheetClazz, Integer num, Integer columnNum) throws Exception {
        Field[] totalRowClazzFields = sheetClazz.getDeclaredFields();
        Workbook workbook = new XSSFWorkbook(file.getInputStream());
        Sheet sheet = workbook.getSheetAt(0);
        List<T> ts = new LinkedList<>();
        for (int j = num; j < sheet.getLastRowNum() + 1; j++) {
            Row row = sheet.getRow(j);
            T obj = (T) sheetClazz.newInstance();
            for (int k = 0; k < columnNum; k++) {
                String value = "";
                try {
                    value = row.getCell(k).getStringCellValue().trim();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                new PropertyDescriptor(totalRowClazzFields[k].getName(), sheetClazz).getWriteMethod().invoke(obj, value);
            }
            ts.add(obj);
        }
        return ts;
    }

}

猜你喜欢

转载自blog.csdn.net/csdnwodeboke/article/details/80020691