讀取excel爲 Java List對象


import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
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 java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 讀取excel,並將其映射成pojo
 */
public class ExcelUtil {

    public <T> List<T> excelToPOJO(String excelPath, Class<T> clazz, Map<Integer, String> mapping,int sheet,int start) {
        try {
            File excel = new File(excelPath);
            if (excel.isFile() && excel.exists()) {
                return excelToPOJO(excel, clazz, mapping, sheet,start);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return new ArrayList();
    }

    /**
     *
     * @param excel
     * @param clazz
     * @param mapping 映射Map<列數,實例類的屬性名>
     * @param <T>
     * @return
     */
    public <T> List<T> excelToPOJO(File excel, Class<T> clazz, Map<Integer, String> mapping,int sheetIndex,int start) {

        List<T> result = new ArrayList<>();
        try {
            if (excel.isFile() && excel.exists()) {   //判斷文件是否存在

                String[] split = excel.getName().split("\\.");  //.是特殊字符,需要轉義!!!!!
                Workbook wb;
                //根據文件後綴(xls/xlsx)進行判斷
                if ("xls".equals(split[1])) {
                    FileInputStream fis = new FileInputStream(excel);   //文件流對象
                    wb = new HSSFWorkbook(fis);
                } else if ("xlsx".equals(split[1])) {
                    FileInputStream fis = new FileInputStream(excel);
                    wb = new XSSFWorkbook(fis);
                } else {
                    System.out.println("文件類型錯誤!");
                    return null;
                }

                //開始解析
                Sheet sheet = wb.getSheetAt(sheetIndex);     //讀取sheet 0

                int firstRowIndex = sheet.getFirstRowNum() + start;   //第一行是列名,所以不讀
                int lastRowIndex = sheet.getLastRowNum();
                System.out.println("firstRowIndex: " + firstRowIndex);
                System.out.println("lastRowIndex: " + lastRowIndex);

                for (int rIndex = firstRowIndex; rIndex <= lastRowIndex; rIndex++) {   //遍歷行
                    System.out.println("rIndex: " + rIndex);
                    Row row = sheet.getRow(rIndex);
                    if (row != null) {
                        T obj = clazz.newInstance();
                        Set<Integer> keySet = mapping.keySet();
                        for (Integer key : keySet) {
                            String field = mapping.get(key);
                            String cell = row.getCell(key)==null ? "":row.getCell(key).toString();
                            ReflectUtil.setFileValue(obj, field, cell);
                        }
                        result.add(obj);
                    }
                }
            } else {
                System.out.println("找不到指定的文件");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }


    /**
     * 將excel讀取成List
     * @param excelPath
     * @param start
     * @return
     */
    public List<List<String>> excelToList(String excelPath,int start) {
        try {
            File excel = new File(excelPath);
            if (excel.isFile() && excel.exists()) {
                return excelToList(excel,start);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return new ArrayList();
    }

    public  List<List<String>> excelToList(File excel,int startrow) {
        List<List<String>> result = new ArrayList<List<String>>();
        try {
            if (excel.isFile() && excel.exists()) {   //判斷文件是否存在

                String[] split = excel.getName().split("\\.");  //.是特殊字符,需要轉義!!!!!
                Workbook wb;
                //根據文件後綴(xls/xlsx)進行判斷
                if ("xls".equals(split[1])) {
                    FileInputStream fis = new FileInputStream(excel);   //文件流對象
                    wb = new HSSFWorkbook(fis);
                } else if ("xlsx".equals(split[1])) {
                    wb = new XSSFWorkbook(excel);
                } else {
                    System.out.println("文件類型錯誤!");
                    return null;
                }
                //開始解析
                Sheet sheet = wb.getSheetAt(0);     //讀取sheet 0

                int firstRowIndex = startrow-1;   //第一行是列名,所以不讀
                int lastRowIndex = sheet.getLastRowNum();

                for (int rIndex = firstRowIndex; rIndex <= lastRowIndex; rIndex++) {   //遍歷行
                    ArrayList<String> oneRow = new ArrayList<>();
                    Row row = sheet.getRow(rIndex);
                    if (row != null) {
                        int start = row.getFirstCellNum();
                        int end = row.getLastCellNum();
                        for (int i = start; i < end; i++) {
                            Cell cell = row.getCell(i);
                            oneRow.add(cell.toString());
                        }
                        result.add(oneRow);
                    }
                }
            } else {
                System.out.println("找不到指定的文件");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

}

 

 

gradle依賴

    compile ("org.apache.poi:poi:3.17-beta1")
    compile ("org.apache.poi:poi-ooxml:3.9")
    compile ("org.apache.poi:poi-ooxml-schemas:3.9")

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章