В приведенном ниже коде я пытаюсь получить данные с листа excel и хранить их внутри массива. Я написал код для получения данных из файла excel в моем методе ReadExcelData. Теперь проблема, с которой я столкнулся, находится внутри моего основного метода, когда я печатаю данные, используя массив, который данные печатаются несколько раз. Я обнаружил, что, поскольку я использовал System.out.println() внутри двоих для lop, поэтому он печатается многократно. Чтобы решить эту проблему, я удалил System.out.println() (Comment- В нижеприведенном коде полужирный System.out.println() - тот, который я удалил) из метода ReadExcelData, и как только я сделал это, я не смог для получения какого-либо результата. Пожалуйста, скажите мне, что я должен сделать, чтобы получить данные из ReadExcelData только один раз, не распечатывая его, потому что я хочу распечатать данные в моем основном методе.
package com.selenium;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.*;
@SuppressWarnings("unused")
public class ReadExcelData {
static String[] data = new String[15];
public String getData() throws InvalidFormatException, IOException{
String data="Initial";
File file = new File("C:\\Users\\Admin\\Desktop\\ScreenShot\\Excel.xls");
FileInputStream input = new FileInputStream(file);
Workbook work = WorkbookFactory.create(input);
Sheet sheet = work.getSheet("Data");
int rownum=sheet.getLastRowNum();
//System.out.println("Row number = "+rownum);
for(int i=0;i<rownum+1; i++){
Row row=sheet.getRow(i);
if(row != null){
for(int j=0; j<row.getLastCellNum();j++){
//System.out.println(row.getLastCellNum());
if(row.getCell(j) != null){
data = row.getCell(j).getStringCellValue();
if(data != null){
**System.out.println(data);**
}//if2
}//if1
}//for2
}//if3
}//for1
return data;
}//getdata
public static void main(String[] args) throws InvalidFormatException, IOException{
ReadExcelData read =new ReadExcelData();
for(int i=0;i<data.length;i++){
data[i]= read.getData();
}
}//main
}//class
Code block which is giving problem-
if(data != null){
**System.out.println(data);**
}//if2
Проблема в том, что для каждой ячейки данных объекта вы вызываете метод, который заполняет его. У тебя есть:
data[i]= read.getData();
и затем вы получите свой метод 15 раз, открыв, прочитав и вернув весь файл 15 раз.
Просто удалите цикл из основного, и все будет работать так, как вы хотите.
вы вызываете свой метод в цикле:
for(int i=0;i<data.length;i++){
data[i]= read.getData();
}
Поэтому он печатает несколько раз.
Если вы хотите поместить все значения в данные [], вы должны сделать следующие изменения:
public String[] getData() throws InvalidFormatException, IOException{
String[] data = new String[15];
...
int k =0;
...
String cellVal = row.getCell(j).getStringCellValue();
if(cellVal != null){
data[k++] = cellVal;
}//if2
....
return data;
}
И из основного метода вызывается только один раз:
String[] excelData = read.getData();
read.getData
считывает все данные изExcel.xls
и печатает их. Ваша основная программа вызываетread.getData
15 раз. Как вы думаете, что произойдет, когда вы назвали это 15 раз?