簡體   English   中英

如何將數據從Excel存儲到ArrayList <ArrayList<String> &gt;

[英]How to store data from excel to ArrayList<ArrayList<String>>

我有這樣的Excel數據

111 | 222 | 333 | 444 | 555 | 666
11  | 12  | 13  | 14  | 15  | 16
1   | 2   | 3   | 4   | 5   | 6
a   | b   | c   | d   | e   | f

我的代碼是這樣的

public static void main(String[] args) {
    try {
        FileInputStream file = new FileInputStream(new File("xxx"));
        XSSFWorkbook wb = new XSSFWorkbook(file);
        XSSFSheet sheet = wb.getSheetAt(0);

        DataFormatter formatter = new DataFormatter();

        ArrayList<ArrayList<String>> mainArrayList = new ArrayList<ArrayList<String>>();

        ArrayList<String> al = new ArrayList<String>();

        for (int rowNum = 0; rowNum < sheet.getLastRowNum() + 1; rowNum++) {

            String val = null;

            Row r = sheet.getRow(rowNum);

            for (int i = 0; i < r.getLastCellNum() + 1; i++) {
                Cell cell = r.getCell(i);
                val = formatter.formatCellValue(cell);

            }
            al.add(val);
            mainArrayList.add(al);
        }

        System.out.print(mainArrayList);

    } catch (

    Exception e) {
        e.printStackTrace();
    }
}

輸出: [[, , , ], [, , , ], [, , , ], [, , , ]]

我想要的結果是這樣的

[[111, 222, 333, 444, 555, 666, ],[11, 12, 13, 14, 15, 16, ],[1, 2, 3, 4, 5, 6, ],[a, s, d, f, g, h, ]]

我相信是因為al.add(val); null但我不知道如何將val添加到arraylist al中。 救命?

首先,您需要移動ArrayList<String> al = new ArrayList<String>(); 進入for (int rowNum = 0; rowNum < sheet.getLastRowNum() + 1; rowNum++) {} 現在每個循環中都需要更新al

其次,您需要移動al.add(val); 進入for (int i = 0; i < r.getLastCellNum() + 1; i++) {} 因為在循環中, val是正確的值。

    ArrayList<String> al = new ArrayList<String>();

    for (int rowNum = 0; rowNum < sheet.getLastRowNum() + 1; rowNum++) {

        String val = null;

        Row r = sheet.getRow(rowNum);

        for (int i = 0; i < r.getLastCellNum() + 1; i++) {
            Cell cell = r.getCell(i);
            val = formatter.formatCellValue(cell);

        }
        al.add(val);
        mainArrayList.add(al);
    }

換成這個

    for (int rowNum = 0; rowNum < sheet.getLastRowNum() + 1; rowNum++) {
        ArrayList<String> al = new ArrayList<String>();
        String val = null;

        Row r = sheet.getRow(rowNum);

        for (int i = 0; i < r.getLastCellNum() + 1; i++) {
            Cell cell = r.getCell(i);
            val = formatter.formatCellValue(cell);
            al.add(val);
        }

        mainArrayList.add(al);
    }

您需要如下更改代碼

public static void main(String[] args) {

    try {
      final FileInputStream file =
          new FileInputStream(new File("xxx"));
      final XSSFWorkbook wb = new XSSFWorkbook(file);
      final XSSFSheet sheet = wb.getSheetAt(0);
      final DataFormatter formatter = new DataFormatter();
      final ArrayList<ArrayList<String>> mainArrayList = new ArrayList<ArrayList<String>>();
      for (int rowNum = 0; rowNum < sheet.getLastRowNum() + 1; rowNum++) {
        String val = null;
        final ArrayList<String> al = new ArrayList<String>();
        final Row r = sheet.getRow(rowNum);
        for (int i = 0; i < r.getLastCellNum(); i++) {
          final Cell cell = r.getCell(i);
          val = formatter.formatCellValue(cell);
          al.add(val);
          mainArrayList.add(al);
        }
      }
      System.out.print(mainArrayList);
    } catch (final Exception e) {
      e.printStackTrace();
    }
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM