Возможно получить самую последнюю строку, но не последний столбец (вам нужно вычислить его по именам ячеек).
Более подробно, вот пример того, что я сделал, чтобы решить эту проблему.
Вы можете получить свой файл так:
InputStream is = new FileInputStream("Path/to/my/file.xlsx");
SpreadsheetMLPackage xlsxPackage = SpreadsheetMLPackage.load(is);
WorkbookPart wb = xlsxPackage.getWorkbookPart();
Допустим, мы хотим работать с первым листом вашего файла:
int indexSheet = 0;
List<org.xlsx4j.sml.Row> rowsList = wb.getWorksheet(indexSheet).getContents().getSheetData().getRow();
Затем, чтобы получить последнюю строку, вы можете использовать getR, который дает вам соответствующий номер строки Excel:
Long lastRowIndex = rowsList.get(rowsList.size() - 1).getR();
Чтобы получить Последний номер столбца вам нужно больше работы. Во-первых, вам нужен способ преобразовать имя столбца в целое число (например, AB - 28). Вы можете сделать что-то вроде этого:
private Integer computeColumnIndex(String cellName) {
String columnLetters = cellName.replaceAll("\\d","");
double sum = Double.valueOf(0);
int len = columnLetters.length();
for(int i = 0; i < len; i++) {
sum += (columnLetters.charAt(i) - 'A' + 1)*Math.pow(26, len-i-1) ;
}
return (int)sum;
};
Затем для каждой строки вы можете вычислить columnIndex последней ячейки строки и сохранить наибольшее значение:
int lastColumnIndex = 1;
for(org.xlsx4j.sml.Row row: rowsList) {
String cellName = Iterables.getLast(row.getC()).getR();
int columnIndex = computeColumnIndex(cellName);
lastColumnIndex = Math.max(lastColumnIndex, columnIndex);
}