#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];