Erreur: Comment lire une cellule vide dans Excel
Je suis en train de lire des données à partir d'excel à l'aide de POI. Comment puis-je vérifier si c'est une cellule vide?
Je ne sais pas ce qu'il manque je pense que cela devrait fonctionner:
java.util.Iterator<Row> rows = worksheet.rowIterator();
HSSFRow row = (HSSFRow) rows.next();
HSSFCell cellF1 = (HSSFCell) row.getCell(5);
if(cellF1.getCellType() == HSSFCell.CELL_TYPE_BLANK) {
String val = "";
}
Je suis d'erreur dans l'instruction if (pointeur nul), mais seulement si j'utilise ce que je puisse vérifier que:
while (rows.hasNext()) {
HSSFRow row = (HSSFRow) rows.next();
java.util.Iterator<Cell> cells = row.cellIterator();
while (cells.hasNext()) {
HSSFCell cell = (HSSFCell) cells.next();
if(cell.getCellType() == HSSFCell.CELL_TYPE_BLANK) {
String emptytype = "";
System.out.println("empty");
}
}
}
Si vous êtes l'obtention d'un pointeur null, ce qui signifie que cellF1 est pas défini. Êtes-vous sûr de la 6e cellule est-elle définie? Gardez à l'esprit que les cellules sont basés sur 0.
OriginalL'auteur rifo pangemanan | 2012-06-22
Vous devez vous connecter pour publier un commentaire.
Ce comportement est normal pour les 1-l'argument de la version de
Row.getCell
. Si vous regardez la doc API, il est expressément précisé quegetCell
retourne null si la cellule n'est pas défini. De nombreux java fonctions présentent ce genre de comportement, donc il n'y a rien de mal avec le codage de prendre cela en compte. Donc, une version de votre code pourrait être quelque chose comme:Sinon, vous pouvez utiliser l'autre version de
Row.getCell
, qui prend un second argument qui spécifie le manque de cellules de la politique. Dans cette version, vous permettent de spécifier quegetCell
renvoie null cellulaire pour les cellules vides. Donc, voici quelques althernative code:Ou, si vous préférez, vous pouvez spécifier la politique de
Row.CREATE_NULL_AS_BLANK
. Dans ce cas, vous devez remplacerif (cell != null)
avecif (cell.getCellType() != Cell.CELL_TYPE_BLANK)
.Vous êtes les bienvenus. Juste pour en dire un peu plus. Le hasDataFlag est seulement la valeur true si la cellule contient des données. Il est donc vrai a) si la ligne n'est pas null et b) si la cellule n'est pas nulle et c) si le type de cellule n'est pas CELL_TYPE_BLANK. La raison j'ai codé de cette façon c'est parce qu'il évite tout un tas de imbriquée fi. Je pourrais avoir codé avec imbriquée ifs (comme je l'ai fait dans le 2ème exaample), mais personnellement, je pense que l'aide de la hasDataFlag plus propre code. Mais c'est juste mon style personnel; ce qui est plus facile pour vous est fine.
OriginalL'auteur Howard Schutzman
Si vous utilisez le
CellIterator
, vous obtiendrez seulement les cellules qui ont été définis à un certain point (pas denull
cellules, mais vous obtiendrezblank
cellules). Si vous souhaitez obtenir toutes les cellules, de les récupérer par l'indice dePar index, vous feriez quelque chose comme:
OriginalL'auteur Gagravarr
Cette astuce heped m'a beaucoup.
Voir si il est utile pour vous...
OriginalL'auteur softwareplay
OriginalL'auteur user3528804
public String getCellData(String Nom_fichier,int Sheet_Num, int arguments no_lig, int Col_Num) throws IOException{
OriginalL'auteur Anand