Org.Apache.poi 3.15を使用してExcelファイル(ファイル拡張子xlsx)を読んでいます。
これは私のコードです:
try (FileInputStream fileInputStream = new FileInputStream(file); XSSFWorkbook workbook = new XSSFWorkbook(file)) {
XSSFSheet sheet = workbook.getSheetAt(0);
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
switch (cell.getCellType()) {
case Cell.CELL_TYPE_NUMERIC:
System.out.print(cell.getNumericCellValue() + "(Integer)\t");
break;
case Cell.CELL_TYPE_STRING:
System.out.print(cell.getStringCellValue() + "(String)\t");
break;
}
}
System.out.println("");
}
} catch (Exception e) {
e.printStackTrace();
}
cell.getCellType()
が非推奨であるという警告が表示されます。誰かが代替案を教えてもらえますか?
受け入れられた答えは、廃止の理由を示していますが、代替の名前を付け忘れています:
CellType getCellTypeEnum()
ここで、CellType
は、セルのタイプを記述する列挙です。
POI 4.0では、getCellTypeEnum()
の名前をgetCellType()
に戻す予定です。
次を使用できます。
cell.getCellTypeEnum()
さらにセルタイプを比較するには、次のようにCellTypeを使用する必要があります:
if(cell.getCellTypeEnum() == CellType.STRING){
.
.
.
}
ドキュメントを参照できます。そのかなり役立つ:-
https://poi.Apache.org/apidocs/org/Apache/poi/ss/usermodel/Cell.html
GetCellType()を使用します
switch (cell.getCellType()) {
case BOOLEAN :
//To-do
break;
case NUMERIC:
//To-do
break;
case STRING:
//To-do
break;
}
FileInputStream fis = new FileInputStream(new File("C:/Test.xlsx"));
//create workbook instance
XSSFWorkbook wb = new XSSFWorkbook(fis);
//create a sheet object to retrieve the sheet
XSSFSheet sheet = wb.getSheetAt(0);
//to evaluate cell type
FormulaEvaluator formulaEvaluator = wb.getCreationHelper().createFormulaEvaluator();
for(Row row : sheet)
{
for(Cell cell : row)
{
switch(formulaEvaluator.evaluateInCell(cell).getCellTypeEnum())
{
case NUMERIC:
System.out.print(cell.getNumericCellValue() + "\t");
break;
case STRING:
System.out.print(cell.getStringCellValue() + "\t");
break;
default:
break;
}
}
System.out.println();
}
このコードは正常に機能します。 getCellTypeEnum()
を使用して比較するには、NUMERIC
またはSTRING
のみを使用します。
ドキュメント から:
int getCellType()
非推奨。 POI 3.15。将来的にCellType
列挙型を返します。セルタイプを返します。 POIバージョン4.0では
CellType
を返します。上位互換性のために、コードにセル型リテラルをハードコーディングしないでください。
3.15は満足のいく解決策を提供していないようです。Cell.CELL_TYPE_*の古いスタイルを使用するか、廃止予定としてマークされたgetCellTypeEnum()メソッドを使用します。少しの付加価値のための多くの妨害...
POI 3.17では、これは私のために働いた
switch (cellh.getCellTypeEnum()) {
case FORMULA:
if (cellh.getCellFormula().indexOf("LINEST") >= 0) {
value = Double.toString(cellh.getNumericCellValue());
} else {
value = XLS_getDataFromCellValue(evaluator.evaluate(cellh));
}
break;
case NUMERIC:
value = Double.toString(cellh.getNumericCellValue());
break;
case STRING:
value = cellh.getStringCellValue();
break;
case BOOLEAN:
if(cellh.getBooleanCellValue() == true){
value = "true";
} else {
value = "false";
}
break;
default:
value = "";
break;
}