Apache POI libary를 사용하여 가져오고 응용 프로그램 (tableView)으로 Excel 테이블을 내 보냅니다. Excel에서 응용 프로그램의 행을 삭제하는 데 문제가 있습니다. 행의 제거 잘 작동하지만 행을 제거하고 응용 프로그램을 다시 시작하면 마지막 항목을 두 번 가져옵니다. 4 또는 5 개의 항목을 삭제하면 다시 시작할 때 마지막 항목이 4 또는 5 번 표시됩니다. 마지막 줄 번호가 저장되거나 업데이트되지 않는다고 생각합니다. 엑셀 파일의 행 제거는 행을 제거하고 파일을 가져온 후에 내 테이블 뷰에서만 잘 작동합니다. 마지막 엔트리가 두 번 표시됩니다. 응용 프로그램 시작 lastRowNum() = 6; -> 항목 (행)을 제거하고 가져 오기 다시 시작 -> lastRowNum() = 6; Excel Bug입니까? 어떤 도움이든 너무 감사하게 생각합니다. 고마워.Apache POI - Excel에서 응용 프로그램의 행 삭제
제거 방법
FileInputStream에의 INP = FileInputStream에 새로운 ("..."); (의 InputStream 변수없이)
HSSFWorkbook wb = (HSSFWorkbook) WorkbookFactory.create(inp);
HSSFSheet sheet = wb.getSheetAt(0);
String selectedid = "4";
int rowIndex = getRowIndexOfId(sheet, selectedid);
removeRow(sheet, rowIndex);
inp.close();
OutputStream out = new FileOutputStream(
".........");
wb.write(out);
out.close();
}
private static int getRowIndexOfId(HSSFSheet sheet, String selectedid) {
DataFormatter formatter = new DataFormatter();
for (Row row : sheet) {
for (Cell cell : row) {
if (formatter.formatCellValue(cell).trim().equals(selectedid)) {
return row.getRowNum();
}
}
}
return -1;
}
private static void removeRow(HSSFSheet sheet, int rowIndex) {
if (rowIndex >= 0) {
sheet.removeRow(sheet.getRow(rowIndex));
if (rowIndex < sheet.getLastRowNum()) {
sheet.shiftRows(rowIndex + 1, sheet.getLastRowNum(), -1);
}
}
}
수입 :
Iterator<Row> rows = sheet.iterator();
System.out.println(sheet.getLastRowNum());
while (rows.hasNext()) {
nextRow = rows.next();
Iterator<Cell> cellIterator = nextRow.cellIterator();
while (cellIterator.hasNext()) {
cell = (HSSFCell) cellIterator.next();
if (nextRow.getRowNum() == 0) {
nextRow = rows.next();
continue;
}
try {
if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING
|| cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
auftragsnr = nextRow.getCell(0).getStringCellValue();
empfaenger = nextRow.getCell(1).getStringCellValue();
auftrag1 = nextRow.getCell(2).getStringCellValue();
beschreibung = nextRow.getCell(3).getStringCellValue();
zimmernr = nextRow.getCell(4).getNumericCellValue();
datum = nextRow.getCell(5).getDateCellValue();
absender = nextRow.getCell(6).getStringCellValue();
status = nextRow.getCell(7).getStringCellValue();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
Instant instant = datum.toInstant();
ZonedDateTime zdt = instant.atZone(ZoneId.systemDefault());
date = zdt.toLocalDate();
}
} catch (NullPointerException e) {
System.out.println("leer");
}
}
if (nextRow.getRowNum() <= sheet.getLastRowNum()) {
tableview.add(
new Auftrag(auftragsnr, empfaenger, auftrag1, beschreibung, zimmernr, date, absender, status));
excelFile.close();
}
}
}
클래스 변수를 사용하여 lastRowNumber를 저장하고이 값을 클래스간에 전환하면 해결되었습니다 ..... thanks zmau! – Yannick