JAVA POI: как найти ячейку Excel со строковым значением и получить ее позицию (строку), чтобы использовать эту позицию для поиска другой ячейки
Я ищу ячейку в электронной таблице, которая имеет строку "Total", а затем использует строку, в которой эта ячейка должна найти общее значение в другой ячейке, которая всегда является той же ячейкой/столбцом (10-я ячейка в индексе на основе 0).
У меня есть следующий код, который не имеет ошибок (синтаксис), но метод findCell не возвращает значение rowNum:
public static void main(String[] args) throws IOException{
String fileName = "C:file-pathreport.xls";
String cellContent = "Total";
int rownr=0, colnr = 10;
InputStream input = new FileInputStream(fileName);
HSSFWorkbook wb = new HSSFWorkbook(input);
HSSFSheet sheet = wb.getSheetAt(0);
rownr = findRow(sheet, cellContent);
output(sheet, rownr, colnr);
finish();
}
private static void output(HSSFSheet sheet, int rownr, int colnr) {
/*
* This method displays the total value of the month
*/
HSSFRow row = sheet.getRow(rownr);
HSSFCell cell = row.getCell(colnr);
System.out.println("Your total is: " + cell);
}
private static int findRow(HSSFSheet sheet, String cellContent){
/*
* This is the method to find the row number
*/
int rowNum = 0;
for(Row row : sheet) {
for(Cell cell : row) {
while(cell.getCellType() == Cell.CELL_TYPE_STRING){
if(cell.getRichStringCellValue().getString () == cellContent);{
rowNum = row.getRowNum();
return rowNum;
}
}
}
}
return rowNum;
}
private static void finish() {
System.exit(0);
}
}
2 ответов
этот метод fix является решением вашей проблемы:
private static int findRow(HSSFSheet sheet, String cellContent) {
for (Row row : sheet) {
for (Cell cell : row) {
if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
if (cell.getRichStringCellValue().getString().trim().equals(cellContent)) {
return row.getRowNum();
}
}
}
}
return 0;
}
имейте в виду, что ваш colnr
по-прежнему является фиксированным значением.
у вас есть точка с запятой после if
заявление, которое означает, что ваш if
не работает:
if(cell.getRichStringCellValue().getString () == cellContent);{
даже если это не решит вашу проблему, я думаю, что ваш while
заявление не может быть правильной для Здесь;
while(cell.getCellType() == Cell.CELL_TYPE_STRING)
насколько я помню, в POI есть и другие типы ячеек. Попробуйте поставить точку останова на этих линиях и проверить их, если они имеют правильный тип ячейки.