Estoy buscando una celda en una hoja de cálculo que tenga la cadena 'Total' y luego use la fila en la que se encuentra esa celda para encontrar el valor total en otra celda, que siempre es la misma celda/columna (la décima celda en un índice basado en 0).PDI de Java: cómo encontrar una celda de Excel con un valor de cadena y obtener su posición (fila) para usar esa posición para buscar otra celda
he el siguiente código, que no tiene errores (sintaxis), pero el método no devuelve findCell valor ROWNUM:
public static void main(String[] args) throws IOException{
String fileName = "C:\\file-path\\report.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);
}
}
Muchas gracias @msi. El código sugerido solucionó el problema, funcionó perfectamente. Soy relativamente nuevo en la programación, puedo preguntarle: 1. por qué cambió el enunciado while y 2. por qué el retorno del bucle for = 0. ¡gracias de nuevo! – lv10
Cuando usa el ciclo 'while', está asumiendo que todas las celdas a la izquierda de 'celda total' están llenas de cadena. Por ejemplo, celdas como esta: | | 1 | Total | NO SE PUEDE encontrar con while, porque 'while' se romperá en el valor de 1. Volviendo a 0 en caso de que no se encuentre 'total-cell'. – msi
Para comparar dos cadenas, debe usar el método equals. '==' se usa para comparar tipos primitivos, no objetos. Y getString() devuelve un Objeto. Si desea obtener más información sobre cadenas, lea sobre el grupo de cadenas y el método interno. Aquí es donde puedes encontrar casos cuando comparar usando '==' es correcto. También utilicé el método de recorte solo porque a las entradas del usuario les gusta contener algunos espacios adicionales al final de la cadena. – msi