我使用Apache POI库导入,将Excel表导出到应用程序(tableView) . 我在Excel中从应用程序中删除行时遇到一些问题 . 删除行工作正常,但如果我删除一行并重新启动应用程序,它会导入最后一个条目两次 . 如果我删除4或5个条目,重启时最后一个条目将显示4或5次 . 我认为最后的行号不会保存或更新 . 删除excel文件中的行效果很好,只有在我的tableview中,删除行并导入文件后 - 最后一个entrie将显示两次 . 启动应用程序lastRowNum()= 6; - >删除一个条目(行)并重新导入导入 - > lastRowNum()= 6;它是Excel Bug还是类似的东西?我会非常感激任何帮助 . 非常感谢 .
remove method:
FileInputStream inp = new FileInputStream(“......”);
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);
}
}
}
import (without InputStream and variables):
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();
}
}
}
1 回答
我有同样的问题,并通过添加线解决它
sheet.createRow(sheet.getLastRowNum()+1); // adds empty row on last position
打电话给
sheet.removeRow(removingRow);
我认为在这种情况下你不应该认真对待
getLastRowNum()
方法,因为使用excel的表单的想法是它们应该被认为是无限的 .