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

Se ho i dati sopra riportati in un Excel, come faccio accedere al CellNumber del PatchNumber utilizzando il testoGet indice cella da valore della cella, Apache POI

XSSFRow row = (XSSFRow) rows.next();
vorrei accedere row.getCellNumber("PatchNumber"); // Nota questo metodo non esiste nel POI di Apache.

risposta

5

Credo di capire che cosa siete dopo - volete sapere quale colonna contiene la parola "Patch "nella sua prima fila? Se è così, tutto quello che dovete fare è qualcosa di simile:

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"); 
} 

Basta ciclo sulle celle nella prima riga (intestazione), controllare il loro valore, e prendere nota della colonna si è in quando si trova il tuo testo!

+0

Anche io sto usando la stessa tecnica nel mio codice, volevo solo sapere se c'era un'API fornita da Apache POI per fare lo stesso. Grazie per il tuo contributo. – SDS

+0

No. Le esigenze di tutti per trovare le cose nei fogli di lavoro saranno diverse e non c'è nulla di speciale nella prima riga, quindi non c'è nulla di generale che possa funzionare da tutti. La cosa migliore è fare le poche linee di codice da te stesso, coprendo le tue esigenze specifiche! – Gagravarr

2

Non è questo quello che vuoi?

row.getCell(3) 

pubblico XSSFCell getCell (int cellnum) restituisce la cella alla data (0 based) indice, con il Row.MissingCellPolicy dal genitore cartella di lavoro.

Se si desidera accedere esattamente per nome "PatchNumber", è possibile leggere la riga di intestazione e salvare un indice di PatchNumber. Penso che il modello di tabella definisca solo l'accesso alle celle, ma non fornisce l'accesso associato per nome di colonna. Tutte le righe sono uguali nel modello, penso :-)

Per ottenere l'indice delle colonne. Vorrei iterare su riga di intestazione e costruire una lista di nomi di colonne columns quindi è possibile utilizzare columns.indexOf("PatchNumber")

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

+0

getcell (int x) restituisce la cella. Volevo il numero di cella, nel mio caso patchNumber oggi giace nella colonna 4, domani potrebbe passare alla colonna 5 o 3, quindi volevo sapere se posso ottenere l'indice della colonna tramite il testo della colonna. – SDS

+0

Questo non è ovviamente possibile. La riga non conosce la riga di intestazione. Hai provato a leggere la riga di intestazione? – Vladimir

+0

Non sono riuscito a trovare alcuna API e ora, poiché @Vladimir dice che non è possibile, presumo che tale API non esista nel POI di Apache. – 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

questo metodo restituirà l'indirizzo della cella della stringa cercata. –

Problemi correlati