Я использую Apache POI 3.17, чтобы открыть электронную таблицу xlsx, прочитайте row =1
(строка = 0 - это заголовок, который должен остаться там), сохраните значения в моем объекте, а затем удалите row =1
.
Я ожидаю, что после удаления row = 2
станет row = 1
и last row
станет last row -1
.Это мои коды:
private static void removeRow (String pathToExcel ) throws InvalidFormatException {
try {
FileInputStream file = new FileInputStream(pathToExcel);
Workbook workbook = WorkbookFactory.create(file);
Sheet sheet = workbook.getSheetAt(0);
int lastRowNum = sheet.getLastRowNum();
sheet.shiftRows( 2, lastRowNum, -1);
file.close();
FileOutputStream outFile =new FileOutputStream(new File(pathToExcel));
workbook.write(outFile);
outFile.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws InvalidFormatException {
removeRow(PATH_TO_EXCEL);
}
При удалении строки = 1 я получаю
Exception in thread "main" java.lang.IllegalArgumentException: Invalid CellReference: D3:D21
at org.apache.poi.ss.util.CellReference.separateRefParts(CellReference.java:395)
at org.apache.poi.ss.util.CellReference.<init>(CellReference.java:113)
at org.apache.poi.xssf.usermodel.XSSFSheet.shiftRows(XSSFSheet.java:3024)
at org.apache.poi.xssf.usermodel.XSSFSheet.shiftRows(XSSFSheet.java:2966)
at Sandbox.ExcelReader.removeRow(ExcelReader.java:177)
Я не уверен, почему он жалуется на Invalid CellReference?
Благодарю.
Обновлено: Я обнаружил проблему, очевидно, POI не нравится весь столбец D, который содержит формат адреса электронной почты testing@testing.com
, после удаления всего столбца D POI небросить исключение больше.Мне интересно, почему он не любит формат адреса электронной почты.Электронная таблица должна содержать адрес электронной почты.
Обновлено 2 (после предложения Акселя) :
Это не вызовет никаких исключений, но и не удалит строку.После запуска этого метода моя таблица остается такой же, какой была до запуска этого метода.
private static void removeRow(String pathToExcel) throws IOException, InvalidFormatException {
try {
FileInputStream file = new FileInputStream(pathToExcel);
Workbook workbook = WorkbookFactory.create(file);
Sheet sheet = workbook.getSheetAt(0);
int rowIndex = 1;
int lastRowNum = sheet.getLastRowNum();
Row row = sheet.getRow(rowIndex);
if (row != null) {
System.out.println(row.getCell(3).getRichStringCellValue()); //For Testing
System.out.println(row.getCell(4).getRichStringCellValue()); //For Testing
sheet.removeRow(row);
sheet.shiftRows(rowIndex + 1, lastRowNum, -1);
}
if (rowIndex == lastRowNum) {
System.out.println("Last Row");
Row removingRow = sheet.getRow(rowIndex);
if (removingRow != null) {
sheet.removeRow(removingRow);
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}