java-不推荐使用的替代getCellTyp
我正在使用org.apache.poi 3.15读取一个excel文件(文件扩展名为xlsx)。
这是我的代码:
try (FileInputStream fileInputStream = new FileInputStream(file); XSSFWorkbook workbook = new XSSFWorkbook(file)) {
XSSFSheet sheet = workbook.getSheetAt(0);
Iterator rowIterator = sheet.iterator();
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
Iterator 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()的警告。 谁能告诉我替代方法?
user1766169 asked 2020-06-19T23:38:42Z
7个解决方案
49 votes
接受的答案显示了弃用的原因,但未列出替代项:
CellType getCellTypeEnum()
其中getCellTypeEnum()是描述单元格类型的枚举。
计划是在POI 4.0中将getCellTypeEnum()重命名为getCellType()。
Tomasz Stanczak answered 2020-06-19T23:39:25Z
14 votes
您可以使用:
cell.getCellTypeEnum()
为了进一步比较单元格类型,您必须使用CellType,如下所示:
if(cell.getCellTypeEnum() == CellType.STRING){
.
.
.
}
您可以参考文档。 它非常有用:
[HTTPS://POI.Apache.org/API doc S/org/Apache/POI/随时/user model/cell.HTML]
user7171758 answered 2020-06-19T23:39:58Z
8 votes
使用getCellType()
switch (cell.getCellType()) {
case BOOLEAN :
//To-do
break;
case NUMERIC:
//To-do
break;
case STRING:
//To-do
break;
}
Benigno Sales answered 2020-06-19T23:40:18Z
5 votes
从文档中:
CellType 不推荐使用。 兴趣点3.15。 将来将返回CellType枚举。
返回单元格类型。 在POI 4.0版中将返回CellType。 为了向前兼容,请不要在代码中对单元格类型文字进行硬编码。
DimaSan answered 2020-06-19T23:40:47Z
5 votes
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。
Arindam answered 2020-06-19T23:41:07Z
2 votes
看来3.15没有提供令人满意的解决方案:要么使用Cell.CELL_TYPE_ *的旧样式,要么使用标记为已弃用的方法getCellTypeEnum()。很多干扰几乎没有增加价值...
frva answered 2020-06-19T23:41:27Z
0 votes
对于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;
}
Srinivas answered 2020-06-19T23:41:46Z