2014-05-07 4 views
0

Existe-t-il un moyen d'obtenir l'objet ou la coordonnée de cellule par les données contenues dans la cellule? Par exemple si la cellule avec les coordonnées (1; 5) contient la chaîne "FINDME", je voudrais faire quelque chose comme Workbook.GetCellByData ("FINDME") et il devrait retourner l'objet Cell ou (1; 5) .Récupère la cellule par son contenu

J'ai trouvé un code snippet sur le site Web d'Apache POI qui pourrait être utile. Je pouvais lire le classeur entier et trouver les données avec une instruction IF-, mais est un peu sale ...

EDIT: J'ai codé la solution « sale » comme suit:

public Cell getCellByContent(String data) { 
    for (Row row : wb.getSheetAt(0)) { 
     for (Cell cell : row) {   
      if (cell.getCellType() == Cell.CELL_TYPE_STRING){ 
       System.out.println(String.format("Found String type at (%s,%s) and read: %s", row.getRowNum(), cell.getColumnIndex(), cell.getStringCellValue())); 
       if (cell.getStringCellValue() == data) { //HERE 
        return cell;       //HERE 
       }          //HERE 
      } 
     } 
    } 
    System.out.println("Can't find it bruh!"); 
    return null; 

Pour une raison quelconque, il échoue à l'instruction if. Id aiment obtenir la cellule avec le contenu "%title%".

Sortie:

Found String type at (0,0) and read: %title% <------ IT'S RIGHT HERE! 
Found String type at (2,0) and read: Test Information 
... 
Can't find it bruh! 

Est-ce que quelqu'un a une idée pourquoi cela ne fonctionne pas?

+1

il peut être sale, mais si ce n'est pas une fonctionnalité fournie par l'API ou une caractéristique d'un objet fourni par l'API (comme un classeur hypothétique. getMap()) alors sale tout ça est laissé. La solution @RainDrops est la meilleure que je connaisse. –

Répondre

1

Pour réparer la solution sale, remplacez

if (cell.getStringCellValue() == data)

avec

if (cell.getStringCellValue().equals(data))

1

Je pense que je peux vous aider. Vous venez de créer deux boucles for() pour les lignes et colonnes, puis tapez Workbook.getCellValue (i, j) (i est le numéro de la ligne et j est le numéro de la colonne

+0

Je ne connais pas trop le codage, mais pourquoi l'utilisez-vous? 'if (cell.getCellType() == Cell.CELL_TYPE_STRING) {' cell.getStringCellValue vous renvoie le contenu de la cellule sous la forme d'une chaîne.Vous devez juste vérifier si le contenu est le même que les "données" que vous recherchez. Ou je me méprends quelque chose – RainDrops

Questions connexes