Apache POI - getCellType(): Unterschied zwischen den Versionen

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen
K (Excel)
K
Zeile 3: Zeile 3:
  
 
=Excel=
 
=Excel=
Zum Feststellen welchen Typs der Inhalt einer Zelle in einem Excel-Sheet ist, wurde bis Version 3.14 folgende oder eine ähnliche switch-Anweisung in den Code geschrieben:
+
Zum Feststellen welchen Typs der Inhalt einer Zelle in einem Excel-Sheet ist, wurde '''bis Version 3.14''' folgende oder eine ähnliche switch-Anweisung in den Code geschrieben:
  
 
<syntaxhighlight lang="java">
 
<syntaxhighlight lang="java">
Zeile 19: Zeile 19:
 
    
 
    
 
   case Cell.CELL_TYPE_BLANK:
 
   case Cell.CELL_TYPE_BLANK:
  System.out.println();
 
  break;
 
 
 
   case Cell.CELL_TYPE_ERROR:
 
   case Cell.CELL_TYPE_ERROR:
  System.out.println("error");
 
  break;
 
 
 
   case Cell.CELL_TYPE_FORMULA:
 
   case Cell.CELL_TYPE_FORMULA:
 
   System.out.println();
 
   System.out.println();
Zeile 31: Zeile 25:
  
 
   default:
 
   default:
   System.out.println();
+
   System.out.println("Not supported");
 
   break;
 
   break;
 
}
 
}
Zeile 38: Zeile 32:
 
In Version 3.15 hat sich einiges geändert, so dass nun im Interface <code>Cell</code> keine öffentlichen statischen finalen Variablen ([[Konstanten_(Java)|Konstanten]]) mehr zu finden sind. Stattdessen wurden die Zelltypen gegen eine Aufzählung (enum) eingetauscht.
 
In Version 3.15 hat sich einiges geändert, so dass nun im Interface <code>Cell</code> keine öffentlichen statischen finalen Variablen ([[Konstanten_(Java)|Konstanten]]) mehr zu finden sind. Stattdessen wurden die Zelltypen gegen eine Aufzählung (enum) eingetauscht.
  
Der Code zum Feststellen des Inhaltstyps einer Zelle sollte nun so aussehen:
+
Der Code zum Feststellen des Inhaltstyps einer Zelle konnte nun die [[Methode]] getCellTypeEnum() für den Vergleich benutzen.
  
 
<syntaxhighlight lang="java">
 
<syntaxhighlight lang="java">
Zeile 58: Zeile 52:
 
   break;
 
   break;
  
 +
  case BLANK:
 +
  case ERROR:
 
   case FORMULA:
 
   case FORMULA:
  System.out.println(cell.getCellFormula());
 
  break;
 
 
  case BLANK:
 
 
   System.out.println();
 
   System.out.println();
 
   break;
 
   break;
  
 
   default:
 
   default:
   System.out.println();
+
   System.out.println("Not supported");
 
   break;
 
   break;
 
}
 
}
Zeile 74: Zeile 66:
 
Die Methode '''getCellTypeEnum() ist als deprecated eingestuft''' und wird voraussichtlich in Version 4.2 entfernt werden.
 
Die Methode '''getCellTypeEnum() ist als deprecated eingestuft''' und wird voraussichtlich in Version 4.2 entfernt werden.
  
Zukünfige Versionen deiner Software, die Apache POI benutzt, sollten den Code entsprechen anpassen.
+
Zukünfige Versionen einer Software, die Apache POI benutzt, sollten den Code entsprechen anpassen und '''getCellType()''' verwenden.
  
 
<syntaxhighlight lang="java">
 
<syntaxhighlight lang="java">
Zeile 94: Zeile 86:
 
   break;
 
   break;
  
 +
  case BLANK:
 +
  case ERROR:
 
   case FORMULA:
 
   case FORMULA:
  System.out.println(cell.getCellFormula());
 
  break;
 
 
  case BLANK:
 
 
   System.out.println();
 
   System.out.println();
 
   break;
 
   break;

Version vom 3. März 2019, 17:31 Uhr

Apache POI ist ein Framework zum Verarbeiten von Microsoft Dateiformaten wie Word (*.doc, *.docx), Excel (*.xsl, *.xslx) und Powerpoint (*.ppt).

Excel

Zum Feststellen welchen Typs der Inhalt einer Zelle in einem Excel-Sheet ist, wurde bis Version 3.14 folgende oder eine ähnliche switch-Anweisung in den Code geschrieben:

Cell cell = ...
CellValue cellValue = evaluator.evaluate(cell);

switch (cellValue.getCellType()) {
   case Cell.CELL_TYPE_NUMERIC:
   System.out.println(cellValue.getNumberValue());   
   break;
 
   case Cell.CELL_TYPE_STRING:
   System.out.println(cellValue.getStringValue());
   break;
   
   case Cell.CELL_TYPE_BLANK:
   case Cell.CELL_TYPE_ERROR:
   case Cell.CELL_TYPE_FORMULA:
   System.out.println();
   break;

   default:
   System.out.println("Not supported");
   break;
}

In Version 3.15 hat sich einiges geändert, so dass nun im Interface Cell keine öffentlichen statischen finalen Variablen (Konstanten) mehr zu finden sind. Stattdessen wurden die Zelltypen gegen eine Aufzählung (enum) eingetauscht.

Der Code zum Feststellen des Inhaltstyps einer Zelle konnte nun die Methode getCellTypeEnum() für den Vergleich benutzen.

switch (cell.getCellTypeEnum()) {
   case STRING:
   System.out.println(cell.getRichStringCellValue().getString());
   break;
   
   case NUMERIC:
   if (DateUtil.isCellDateFormatted(cell)) {
      System.out.println(cell.getDateCellValue());
   } else {
      System.out.println(cell.getNumericCellValue());
   }
   break;

   case BOOLEAN:
   System.out.println(cell.getBooleanCellValue());
   break;

   case BLANK:
   case ERROR:
   case FORMULA:
   System.out.println();
   break;

   default:
   System.out.println("Not supported");
   break;
}

Die Methode getCellTypeEnum() ist als deprecated eingestuft und wird voraussichtlich in Version 4.2 entfernt werden.

Zukünfige Versionen einer Software, die Apache POI benutzt, sollten den Code entsprechen anpassen und getCellType() verwenden.

switch (cell.getCellType()) {
   case STRING:
   System.out.println(cell.getRichStringCellValue().getString());
   break;
   
   case NUMERIC:
   if (DateUtil.isCellDateFormatted(cell)) {
      System.out.println(cell.getDateCellValue());
   } else {
      System.out.println(cell.getNumericCellValue());
   }
   break;

   case BOOLEAN:
   System.out.println(cell.getBooleanCellValue());
   break;

   case BLANK:
   case ERROR:
   case FORMULA:
   System.out.println();
   break;

   default:
   System.out.println();
   break;
}