Мне нужно удалить несколько строк листа Excel xls. Эти строки всегда содержат одну и ту же первую ячейку, поэтому я проверяю первую ячейку всех строк, чтобы найти эти строки
SSFCell myCell = myRow.getCell(0);
myCell.setCellType(Cell.CELL_TYPE_STRING);
String foundString = myCell.getStringCellValue();
if(foundString.equals(searchString)){
foundRows.add(rowCount);
}
rowCount++;
Затем я продолжаю и «удаляю» эти строки с помощью removeRow, которая обнуляет все значения.
public static void removeRows() {
List<Integer> foundRowsToDelete = new ArrayList<Integer>();
//Copy values to another list
for(int i=0; i<foundRows.size(); i++){
foundRowsToDelete.add(foundRows.get(i));
}
//Delete values from rows, leaving empty rows
while(foundRowsToDelete.size()!=0){
int rowIndex = foundRowsToDelete.get(0);
Row removingRow = mySheet.getRow(rowIndex);
if (removingRow != null) {
mySheet.removeRow(removingRow);
foundRowsToDelete.remove(0);
}
}
//Move empty rows to bottom of the sheet
for(int i = 0; i < mySheet.getLastRowNum(); i++){
if(isRowEmpty(i)){
mySheet.shiftRows(i+1, mySheet.getLastRowNum(), -1);
i--;
}
}
}
Я проверяю, пусты ли они, используя дублированный счетчик строк
//Comparision of previously detected empty rows and given row count
public static boolean isRowEmpty(int suspectedRowNumber) {
for(int i=0;i<foundRows.size();i++){
if (suspectedRowNumber == foundRows.get(i)){
foundRows.remove(i);
return true;
}
}
return false;
}
Однако удаляется только первая из этих строк. Остальное останется пустым. Поэтому я предполагаю, что что-то не так с некоторым приращением, сделанным мной, но я просто не могу точно понять, почему.
Заранее благодарны за Вашу помощь.
foundRowsToDelete.add(i);
вместоfoundRowsToDelete.add(foundRows.get(i));
- person Chris Arenz   schedule 05.01.2016