为了账号安全,请及时绑定邮箱和手机立即绑定

如何将数据从excel存储到ArrayList<ArrayList<String>>

如何将数据从excel存储到ArrayList<ArrayList<String>>

潇潇雨雨 2021-12-22 16:49:02
我有这样的 excel 数据111 | 222 | 333 | 444 | 555 | 66611  | 12  | 13  | 14  | 15  | 161   | 2   | 3   | 4   | 5   | 6a   | 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 中。帮助?
查看完整描述

2 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

你需要改变你的代码如下


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();

    }

  }


查看完整回答
反对 回复 2021-12-22
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

首先你需要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++) {}. 因为在循环中, theval是正确的值。


    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);

    }


查看完整回答
反对 回复 2021-12-22
  • 2 回答
  • 0 关注
  • 229 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号