использование используется, когда у Вас есть ресурс, который Вы хотите расположенный после того, как оно использовалось.
, Например, если Вы выделяете ресурс Файла и только должны использовать его в одном разделе кода для небольшого чтения или записи, использование полезно для избавления от ресурса Файла как только Ваш сделанный.
ресурс, используемый потребности реализовать IDisposable для работы правильно.
Пример:
using (File file = new File (parameters))
{
*code to do stuff with the file*
}
HSSFRow
имеет метод под названием setRowNum (int rowIndex)
.
Когда вам нужно «удалить» строку, вы помещаете этот индекс в список List
. Затем, когда вы переходите к следующей непустой строке, вы берете индекс из этого списка и устанавливаете его, вызывая setRowNum ()
, и удаляете индекс из этого списка. (Или вы можете использовать очередь)
Что-то вроде
int newrownum=0;
for (int i=0; i<=sheet.getLastRowNum(); i++) {
HSSFRow row=sheet.getRow(i);
if (row) row.setRowNum(newrownum++);
}
должно помочь.
Я пытаюсь заглянуть в глубины своего мозга, чтобы узнать о том, что произошло с POI год или два назад, но мой первый вопрос был бы таков: почему строки должны быть удалили перед разбором? Почему бы вам просто не поймать нулевой результат вызова sheet.getRow (rowNum)
и не продолжить?
/**
* Remove a row by its index
* @param sheet a Excel sheet
* @param rowIndex a 0 based index of removing row
*/
public static void removeRow(HSSFSheet sheet, int rowIndex) {
int lastRowNum=sheet.getLastRowNum();
if(rowIndex>=0&&rowIndex<lastRowNum){
sheet.shiftRows(rowIndex+1,lastRowNum, -1);
}
if(rowIndex==lastRowNum){
HSSFRow removingRow=sheet.getRow(rowIndex);
if(removingRow!=null){
sheet.removeRow(removingRow);
}
}
}