чтение значений из формы Excel с одной строкой с несколькими столбцами

#java

#java

Вопрос:

Как насчет чтения строки с несколькими значениями с помощью Excel

например

ссылка тестовый случай1 testcase2 testcase3
Имя Сэм ОЗУ cam
Возраст 20 25 30
пол m F m
поместите место 1 место 2 место 3

Я должен прочитать

 testcase1.name=sam
testcase2.name=ram
testcase3.name=cam 
 

и возраст

как я могу это сделать… любая помощь будет оценена

Комментарии:

1. Вы можете использовать библиотеку Apache POI для синтаксического анализа Excel: poi.apache.org

Ответ №1:

Используйте библиотеку apache poi.

Сначала вы должны прочитать файл Excel в объекте Java

         FileInputStream myFile = new FileInputStream(new File(FILE_NAME));
        Workbook myWorkbook = new XSSFWorkbook(myFile);
        Sheet datatypeSheet = myWorkbook.getSheetAt(0); //read the first sheet
        Iterator<Row> iterator = datatypeSheet.iterator();
 

Затем вы можете перебирать каждую строку, и в каждой строке вы можете прочитать каждую ячейку (иначе значение столбца)

     List<TestCase> myList = new ArrayList();
    int rowNum = 0;
    while (iterator.hasNext()) {

                Row row = iterator.next();
                int columnsSize = row.getLastCellNum();

                //create all objects
                if(rowNum == 0) {
                  for (int i = 1; i <= columnsSize; i  ) {
                     myList.add(new TestCase());
                  }
                } else {
                   //initialize property in each row for all objects
                     for (int i = 1; i <= columnsSize; i  ) {
                        TestCase testCase = myList.get(i-1);

int cellType = row.getCell(i).getCellType();
switch(cellType) {
    case Cell.CELL_TYPE_NUMERIC:
       testCase.properties.add(new Property(row.getCell(0).getStringCellValue(), 
       String.valueOf(row.getCell(i).getNumericCellValue()));
        break;
    case Cell.CELL_TYPE_STRING:
        testCase.properties.add(new Property(row.getCell(0).getStringCellValue(), 
        row.getCell(i).getStringCellValue());
        break;
}
                  }
               }

             rowNum  ;     
             }
System.out.println(myList);

   

  

    public class TestCase {
    public List<Property> properties;

    public TestCase(){
    this.properties = new ArrayList();
                     }
    }

    public class Property {
    String name;
    String value;

     public Property(String name, String value){
     this.name = name;
     this.value = value;
    }
        }
 

*Редактировать: цикл For должен иметь условие <= вместо <

Комментарии:

1. спасибо за ваш код.. Мне нужно пробежаться по нескольким строкам, и это будет цикл .. можем ли мы добавить цикл for после добавления в список? не могли бы вы помочь мне с этим?

2. Вы можете повторить цикл после первого цикла. Вы должны запрашивать новый итератор только с помощью iterator = datatypeSheet.iterator() . Затем вы можете повторить цикл для каждой строки во второй раз, используя аналогичный код, описанный выше.

3. Не удается добавить в массив, в котором написано «Невозможно создать экземпляр строки типа», какое-либо исправление для этого

4. Что вы пытаетесь сделать со строкой, которая приводит к этой ошибке? Выполняете ли вы код, указанный в этом ответе, или что-то другое?

5. Я выполнил вставленный вами код .. не могу добавить в список… Не могли бы вы сказать мне, что означает «List<TestCase> myList = new ArrayList(); TestCase ..

Ответ №2:

Этот учебник может быть полезен в использовании: https://www.javatpoint.com/how-to-read-excel-file-in-java .

По сути, вы используете библиотеку Apache POI для анализа значений файла, генерируя итераторы для каждой строки, затем для каждой ячейки в каждой строке и обрабатывая данные таким образом.

В вашем случае, после импорта соответствующих классов, фрагмент кода будет выглядеть примерно так:

 //Input Data for Class
FileInputStream in = new FileInputStream(new File("<File Location>.xls(x)"));

// Create an Apache POI Workbook reading the file
HSSFWorkbook workbook = new HSSFWorkbook(in);

// Use the Workbook to make a sheet
HSSFSheet sheet = workbook.getSheetAt(0); // Replace 0 with your sheet number

List<Row> rowsList = new ArrayList<Row>();
sheet.iterator().forEachRemaining(actualList::add); // Gets a list of all the rows

int i = -1;
String[] names = new String[3];

for (Cell cell : rowsList[1]) { // Start at second row
    if (i   > 0) {
        names[i] = cell.getStringCellValue();
    }
}

testcase1.name = names[0];
testcase2.name = names[1];
testcase3.name = names[2];

i = -1;
int[] ages = new int[3];

for (Cell cell : rowsList[2]) { // Start at Third Row
    if (i   > 0) {
        ages[i] = (int) cell.getNumericCellValue();
    }
}

testcase1.name = ages[0];
testcase2.name = ages[1];
testcase3.name = ages[2];