Apache POI не обновляет значения - PullRequest
0 голосов
/ 25 июня 2018

Итак, у меня есть этот код, который должен переформатировать электронную таблицу Excel.По сути, я делаю итерацию по каждой строке и ячейке, и когда я нахожу ячейку с правильным ключевым словом, я сохраняю значение из 14-й ячейки в этой строке.Я должен сделать несколько проходов через этот цикл, и я сталкиваюсь с проблемой, что значения не обновляются во второй раз.Скажем, сначала я получаю -12, 2 и 10 для моих 3 значений.Когда я снова запускаю цикл, имена обновляются в выводе массива, но значения, которые я извлекаю из электронной таблицы, не меняются.Похоже, это должно быть довольно простое исправление, но я не могу понять, где ошибка в моем коде.

Когда я запускаю свой код с переменными «Трудовая инкапсуляция» и «Фабрика»Бремя », вот результаты, которые я получаю:

[Стандарт трудовой инкапсуляции, Факт трудовой инкапсуляции, 18 июня, -277222.49, 369647.55, -91020.59] [Стандарт фабричной нагрузки, Фактическая фабрика, 18 июня,-277222.49, 369647.55, -91020.59]

Первая часть моего кода - просто форматирование массива и чтение переменных, которые я хочу принять. Хотя я считаю, что ошибка в последнем цикле while, яЯ не совсем уверен, можно ли это исправить, объявив массивы в другом месте.Любая помощь будет принята с благодарностью!

public class Main {
static XSSFRow row;
public static void main(String[] args) throws IOException {
     FileInputStream stream = new FileInputStream(new File("Production Costs Update.xlsx"));
     XSSFWorkbook workbook = new XSSFWorkbook(stream);
     XSSFSheet spreadsheet = workbook.getSheetAt(0);
     Iterator < Row >  rowIterator = spreadsheet.iterator();
     Scanner scan = new Scanner(System.in);
     System.out.println("How many variables are you adding to the spreadsheet?");
     int num = scan.nextInt();
     scan.nextLine();
     String[] nameArray = new String[num];
     String[] dataArray = new String[6];

     for(int i = 0; i < nameArray.length; i++)
     {
         System.out.println("Enter the next variable: ");
         nameArray[i] = scan.nextLine();
     }


     for(int i = 0; i < nameArray.length; i++)
     {
         String name = nameArray[i];
         dataArray[0] = name + " Standard";
         dataArray[1] = name + " Actual";

         LocalDate today = LocalDate.now();

         int month = today.getMonthValue();
         int year = today.getYear();
         String monthAB = "";
         if(month == 1)
             monthAB = "Jan";
         if(month == 2)
             monthAB = "Feb";
         if(month == 3)
             monthAB = "Mar";
         if(month == 4)
             monthAB = "Apr";
         if(month == 5)
             monthAB = "May";
         if(month == 6)
             monthAB = "Jun";
         if(month == 7)
             monthAB = "Jul";
         if(month == 8)
             monthAB = "Aug";
         if(month == 9)
             monthAB = "Sep";
         if(month == 10)
             monthAB = "Oct";
         if(month == 11)
             monthAB = "Nov";
         if(month == 12)
             monthAB = "Dec";


         String date = monthAB + "-" + (year-2000);

         dataArray[2] = date;


         while(rowIterator.hasNext())
         {
             row = (XSSFRow) rowIterator.next();
             Iterator < Cell > cellIterator = row.cellIterator();
             while(cellIterator.hasNext())
             {
                 Cell cell = cellIterator.next();
                 if(cell.getCellTypeEnum()==CellType.STRING)
                 {
                     if(cell.getStringCellValue().contains(nameArray[i]))
                     {
                         if(cell.getStringCellValue().contains("Standard"))
                         {
                             dataArray[3] =  String.valueOf(row.getCell(14).getNumericCellValue());
                         }
                         if(cell.getStringCellValue().contains("Actual"))
                         {
                             dataArray[4] = String.valueOf(row.getCell(14).getNumericCellValue());
                         }
                         if(cell.getStringCellValue().contains("Variance"))
                         {
                             dataArray[5] = String.valueOf(row.getCell(14).getNumericCellValue());
                         }
                     }

                 }
             }



         }
         System.out.println(Arrays.toString(dataArray));
     }

}

}

1 Ответ

0 голосов
/ 25 июня 2018

Вы создаете итератор только один раз, прежде чем ваш цикл закончится nameArray.В результате при попытке поиска второй переменной итератор строки становится пустым.Поскольку вы хотите пересмотреть строки, вам следует переместить следующую строку внутрь цикла for:

Iterator <Row>  rowIterator = spreadsheet.iterator();

Или просто использовать расширенный цикл for

for (Row row : spreadsheet) {
....
}
...