• файл excel (staff.xls)
    ID имя
    1 Али
    2 абу
    3 ахмад

  • код Java

    FileInputStream inputFile = new FileInputStream("staff.xls");
    XSSFWorkbook workbook = new XSSFWorkbook(inputFile);
    XSSFSheet spreadsheet = workbook.getSheetAt(0);
    XSSFRow row;
    Cell cell;
    
    Iterator<Row> rowIterator = spreadsheet.iterator();
    
    while(rowIterator.hasNext()){
         row = (XSSFRow)rowIterator.next();
    
         Iterator<Cell> cellIterator = row.cellIterator();
    
         while(cellIterator.hasNext()){
             cell = cellIterator.next();
             cell.setCellType(Cell.CELL_TYPE_STRING); 
    
         switch(cell.getCellType()){
             case Cell.CELL_TYPE_STRING:
                System.out.print(cell.getStringCellValue()+"|");
                break;
             case Cell.CELL_TYPE_NUMERIC:
                System.out.print(cell.getNumericCellValue()+"|");
                break;
             }
         }
    
         System.out.println();
    }
    
  • Мой вопрос:
    (1) Как поместить запись в массив или Arraylist?
    (2) После создания, как разделить "|"?

0
Michael Kuan 26 Фев 2015 в 08:30

2 ответа

Лучший ответ

Просто создайте переменную List of List перед первым пока в начале каждой итерации создайте новый список, поместите элементы в этот список и добавьте этот список в основной список списков в конце итерация. У вас должно получиться что-то вроде этого:

...

List<List<String>> records = new ArrayList<List<String>>();

while(rowIterator.hasNext()){
    List<String> record = new ArrayList<String>();

    row = (XSSFRow)rowIterator.next();

    Iterator<Cell> cellIterator = row.cellIterator();

    while(cellIterator.hasNext()){
        cell = cellIterator.next();
        cell.setCellType(Cell.CELL_TYPE_STRING);

        switch(cell.getCellType()){
            case Cell.CELL_TYPE_STRING:
                record.add(cell.getStringCellValue());
                break;
            case Cell.CELL_TYPE_NUMERIC:
                record.add(Double.toString(cell.getNumericCellValue()));
                break;
        }
    }

    records.add(record);
}

for (List<String> record : records) {
    for (String s : record) {
        System.out.print(" " + s);
    }

    System.out.println();
}

...

Также обратите внимание, что вам не нужно добавлять | символа больше нет, поэтому в конечном итоге нет необходимости разделять. Но обычно для разделения строки существует метод String # split (), который принимает регулярное выражение. Вам нужно использовать это так, чтобы разделить на "|" (вам нужно поставить \ перед |, поскольку это специальный символ регулярного выражения):

for (String record : records) {
    System.out.println(record);

    String[] elements = record.split("\\|");
    for (String element : elements) {
        System.out.println(" -> " + element);
    }
}
2
Igor Uzhviev 26 Фев 2015 в 06:11

Вот что я сделал: я удалил символ трубы и добавил в список массивов. Надеюсь, это поможет тебе.

FileInputStream inputFile = new FileInputStream("staff.xls");
XSSFWorkbook workbook = new XSSFWorkbook(inputFile);
XSSFSheet spreadsheet = workbook.getSheetAt(0);
XSSFRow row;
Cell cell;

List<String> l2 = new LinkedList<String>();
Iterator<Row> rowIterator = spreadsheet.iterator();

while(rowIterator.hasNext()){
    row = (XSSFRow)rowIterator.next();

    Iterator<Cell> cellIterator = row.cellIterator();

    while(cellIterator.hasNext()){
            cell = cellIterator.next();
            cell.setCellType(Cell.CELL_TYPE_STRING); 

            switch(cell.getCellType()){
            case Cell.CELL_TYPE_STRING:

            l2.add(cell.getStringCellValue());

                break;
            case Cell.CELL_TYPE_NUMERIC:

                l1.add((int) cell.getNumericCellValue());
                System.out.println(l1);
                break;
            }
        }
    }

    System.out.println(l2);
}
}
0
Gagravarr 26 Фев 2015 в 11:02