У меня есть ячейка 13 строк x 31, импортированная из файла excel, а затем сохраняющая ее внутри arraylist, поэтому в основном это 2d-массив, подобный этому
[1,2,3,4,5.................]
[a,b,c,d,e.................]
а затем я конвертирую его в массив String [], как это
String [] array = null;
for (int rowNum = 1; rowNum <= sheet.getLastRowNum(); rowNum++) {
Row r = sheet.getRow(rowNum);
ArrayList<String> dl = new ArrayList<String>();
for (int i = 3; i < r.getLastCellNum() + 1; i = i + 3) {
Cell cell = r.getCell(i);
val = formatter.formatCellValue(cell);
dl.add(val);
array = dl.toArray(new String[dl.size()]);
}
// send array as parameter to another method inside the same class
WriteNewFile(array);
break;
}
в другом методе создания нового файла Excel я должен зациклить массив, чем содержать данные, такие как данные массива выше.
for (int x= 0; x<= total - 1; x++) {
Row row3 = sheet.getRow( x+ 2);
Cell cell1 = row3.createCell(3);
cell1.setCellValue(array[x]);
}
когда я запускаю этот код, я получаю такое сообщение об ошибке:
java.lang.ArrayIndexOutOfBoundsException: 32
цель моего кода - напечатать массив в одной ячейке и зациклить строку до итога-1.
общая стоимость 396
ОБНОВЛЕНО
for (int x= 0; x< array.length; x++) {
Row row3 = sheet.getRow( x+ 2);
Cell cell1 = row3.createCell(3);
cell1.setCellValue(array[x]);
}
петля для java.lang.ArrayIndexOutOfBoundsException: 32
была решена.
возвращаясь к основному вопросу, теперь я могу распечатать только первую строку
[1,2,3,4,5.................] //of this row
как перейти к следующему ряду? Мне лучше преобразовать его в 1d массив?
ОБНОВЛЕНО
теперь, после получения массива в качестве параметра, отправляемого другим методом в метод writeNewFile (задача метода writeNewFile - записать новый файл Excel с использованием apache poi данных массива), и я могу записать данные следующим образом:
|test|
1
2
3
4
5
6
предположительно я хочу зациклить массив, чтобы продолжить цикл для следующей строки, подобной этой
|test|
1
2
3
4
5
6
a
b
b
d
e
@ScaryWombat, пожалуйста, обратитесь к моему обновлению
такая же проблема будет существовать
Как вы думаете, где у вас есть 2D-массив? Я вижу только String [] array, который не является 2D. И вы вызываете WriteNewFile(array); для каждой строки, имеющей array как одномерный массив строк. Нам нужно знать, что делает WriteNewFile, чтобы определить, какую строку он пишет. Кстати: WriteNewFile не должно быть названием метода. Имена методов должны начинаться с нижнего регистра writeNewFile. Имена, начинающиеся с верхнего регистра, являются именами классов.
@AxelRichter Мне очень жаль. Я новичок в мире программирования. Я считаю, что мои данные Arraylist - это 13 строк на 31 ячейку. массив = dl.toArray (новая строка [dl.size ()]); я пытался преобразовать из Arraylist в массив, потому что мне нужно записывать все данные из массива, который имеет многострочный массив, в одну ячейку при циклическом цикле строки в соответствии с данными, содержащимися внутри массива
@AxelRichter в настоящее время я могу записывать данные только в первую строку массива, но я не могу продолжить следующую строку массива. спасибо, что сказали мне название метода, кстати
Ваш String [] array может содержать только одну строку данных. И тот, кто написал ваш код, похоже, знал это, поскольку WriteNewFile(array) вызывается для каждой отдельной строки. Итак, нам нужно знать, что делает WriteNewFile, чтобы иметь возможность помочь.
@AxelRichter смотри мое последнее обновление. Надеюсь, это поможет тебе
Нам понадобится код метода WriteNewFile.




когда
xравенtotal -1в соответствии с вашим циклом, тогдаx + 2, очевидно, превысит это значение