Comment obtenir la valeur d'une cellule avec poi dans Java?
Mon code ressemble à ceci
String cellformula_total__percentage= "(1-E" + (rowIndex + 2) + "/" + "D" + (rowIndex + 2) + ")*100";
cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
cell.setCellStyle(this.valueRightAlignStyleLightBlueBackground);
cell.setCellFormula("abs(" + cellformula_total__percentage + ")");
Mais s'il y a dans ce cas, comment puis-je vérifier que ma valeur de cellule contient une valeur d'erreur comme # DIV/0! et comment puis-je le remplacer par N/A
Vous devez utiliser le FormulaEvaluator, comme indiqué ici . Cela renverra une valeur qui est soit la valeur présente dans la cellule, soit le résultat de la formule si la cellule contient une telle formule:
FileInputStream fis = new FileInputStream("/somepath/test.xls");
Workbook wb = new HSSFWorkbook(fis); //or new XSSFWorkbook("/somepath/test.xls")
Sheet sheet = wb.getSheetAt(0);
FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
// suppose your formula is in B3
CellReference cellReference = new CellReference("B3");
Row row = sheet.getRow(cellReference.getRow());
Cell cell = row.getCell(cellReference.getCol());
if (cell!=null) {
switch (evaluator.evaluateFormulaCell(cell)) {
case Cell.CELL_TYPE_BOOLEAN:
System.out.println(cell.getBooleanCellValue());
break;
case Cell.CELL_TYPE_NUMERIC:
System.out.println(cell.getNumericCellValue());
break;
case Cell.CELL_TYPE_STRING:
System.out.println(cell.getStringCellValue());
break;
case Cell.CELL_TYPE_BLANK:
break;
case Cell.CELL_TYPE_ERROR:
System.out.println(cell.getErrorCellValue());
break;
// CELL_TYPE_FORMULA will never occur
case Cell.CELL_TYPE_FORMULA:
break;
}
}
si vous avez besoin du contenu exact (c'est-à-dire le formla si la cellule contient une formule), alors cela est affiché ici .
Edit: Ajout de quelques exemples pour vous aider.
vous obtenez d'abord la cellule (juste un exemple)
Row row = sheet.getRow(rowIndex+2);
Cell cell = row.getCell(1);
Si vous souhaitez simplement définir la valeur dans la cellule à l'aide de la formule (sans connaître le résultat):
String formula ="ABS((1-E"+(rowIndex + 2)+"/D"+(rowIndex + 2)+")*100)";
cell.setCellFormula(formula);
cell.setCellStyle(this.valueRightAlignStyleLightBlueBackground);
si vous voulez changer le message s'il y a une erreur dans la cellule, vous devez changer la formule pour le faire, quelque chose comme
IF(ISERR(ABS((1-E3/D3)*100));"N/A"; ABS((1-E3/D3)*100))
(cette formule vérifie si l'évaluation renvoie une erreur puis affiche la chaîne "N/A", ou l'évaluation s'il ne s'agit pas d'une erreur).
si vous voulez obtenir la valeur correspondant à la formule, vous devez utiliser l'évaluateur.
J'espère que cette aide,
Guillaume
Peut être par: -
for(Row row : sheet) {
for(Cell cell : row) {
System.out.print(cell.getStringCellValue());
}
}
Pour un type de cellule spécifique, vous pouvez essayer:
switch (cell.getCellType()) {
case Cell.CELL_TYPE_STRING:
cellValue = cell.getStringCellValue();
break;
case Cell.CELL_TYPE_FORMULA:
cellValue = cell.getCellFormula();
break;
case Cell.CELL_TYPE_NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
cellValue = cell.getDateCellValue().toString();
} else {
cellValue = Double.toString(cell.getNumericCellValue());
}
break;
case Cell.CELL_TYPE_BLANK:
cellValue = "";
break;
case Cell.CELL_TYPE_BOOLEAN:
cellValue = Boolean.toString(cell.getBooleanCellValue());
break;
}