2012-09-26 36 views
5
Environment Status Version PatchNumber 
Windows  Live  1.0  2 
Unix   Live  2.0  4 
Mac   Live  1.3  8 

Si he los datos anteriores se muestran en un Excel, ¿cómo puedo acceder al cellNumber de PatchNumber utilizando el textoObtener el índice de células del valor de la celda, Apache POI

XSSFRow row = (XSSFRow) rows.next();
quisiera acceder row.getCellNumber("PatchNumber"); // Tenga en cuenta que este método no existe en Apache POI.

Respuesta

5

creo que entiendo lo que está buscando - usted quiere saber qué columna contiene la palabra "Patch "en su primera fila? Si es así, todo lo que necesita hacer es algo como:

Sheet s = wb.getSheetAt(0); 
Row r = s.getRow(0); 

int patchColumn = -1; 
for (int cn=0; cn<r.getLastCellNum(); cn++) { 
    Cell c = r.getCell(cn); 
    if (c == null || c.getCellType() == Cell.CELL_TYPE_BLANK) { 
     // Can't be this cell - it's empty 
     continue; 
    } 
    if (c.getCellType() == Cell.CELL_TYPE_STRING) { 
     String text = c.getStringCellValue(); 
     if ("Patch".equals(text)) { 
     patchColumn = cn; 
     break; 
     } 
    } 
} 
if (patchColumn == -1) { 
    throw new Exception("None of the cells in the first row were Patch"); 
} 

Sólo bucle sobre las celdas de la primera fila (cabecera), comprobar su valor, y hacer una nota de la columna que está en cuando se encuentra ¡tu texto!

+0

Yo también estoy usando la misma técnica en mi código, solo quería saber si había una API proporcionada por Apache POI para hacer lo mismo. Gracias por tu contribución. – SDS

+0

No. Los requisitos de cada persona para encontrar cosas en las hojas de cálculo serán diferentes, y no hay nada especial en la primera fila, por lo que no hay nada general que funcione de todos. ¡La mejor apuesta es hacer las pocas líneas de codificación, cubriendo sus requisitos específicos! – Gagravarr

2

¿No es esto lo que quieres?

row.getCell(3) 

pública XSSFCell getCell (int cellnum) Devuelve la celda en la (0 basados) índice dado, con el Row.MissingCellPolicy del padre Libro de trabajo.

Si desea acceder exactamente por su nombre - "PatchNumber" puede leer la fila de encabezado y guardar un índice de PatchNumber. Creo que el modelo de tabla solo define el acceso a las celdas, pero no proporciona acceso asociado por nombres de columna. Todas las filas son iguales en el modelo. Creo que :-)

Para obtener el índice de la columna. Me iterar sobre fila de encabezado y crear una lista de nombres de columna columns entonces puede utilizar columns.indexOf("PatchNumber")

http://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFRow.html#getCell(int)

+0

getcell (int x) es devolver la celda. Quería el cellNumber, en mi caso patchNumber hoy se encuentra en la columna 4, mañana podría pasar a la columna 5 o 3, así que quería saber si puedo obtener el índice de la columna a través del texto de la columna. – SDS

+0

Esto obviamente no es posible. La fila no sabe sobre la fila del encabezado. ¿Intentó leer la fila de encabezado? – Vladimir

+0

No pude encontrar ninguna API, y ahora que @Vladimir dice que no es posible, asumo que dicha API no existe en Apache POI. – SDS

0
public CellAddress searchStringInXslx(String string) throws IOException{ 
      FileInputStream inputStream = new FileInputStream("Books.xlsx"); 
      Workbook workbook = new XSSFWorkbook(inputStream); 
      Sheet firstSheet = workbook.getSheetAt(0); 
      Iterator<Row> iterator = firstSheet.iterator(); 
      CellAddress columnNumber=null; 

      while(iterator.hasNext()){ 
       Row nextRow = iterator.next(); 
       Iterator<Cell> cellIterator = nextRow.cellIterator(); 
       while (cellIterator.hasNext()) { 
        Cell cell = cellIterator.next(); 
        if(cell.getCellType()==Cell.CELL_TYPE_STRING){ 
         String text = cell.getStringCellValue(); 
          if (string.equals(text)) { 
          columnNumber=cell.getAddress(); 
          break; 
          } 
         } 
        } 
      } 
      workbook.close(); 
      return columnNumber; 
    } 
+2

este método devolverá la dirección de la celda de la cadena buscada. –

Cuestiones relacionadas