java getcelltype_java-不推荐使用的替代getCellTyp

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值