Java 如何读取Excel中单元格类型为公式的数据
当我Java 如何读取Excel中单元格类型为公式的数据,java,excel,Java,Excel,当我System.err.println单元格类型时,结果中显示的单元格类型列之一是我在excel中包含的vlookup公式,如何获得单元格值而不是公式?请帮忙,谢谢 Excel数据: Java代码: while(rowIter.hasNext()) { HSSFRow row = (HSSFRow) rowIter.next(); Iterator cellIter = row.ce
System.err.println
单元格类型时,结果中显示的单元格类型列之一是我在excel中包含的vlookup公式,如何获得单元格值而不是公式?请帮忙,谢谢
Excel数据:
Java代码:
while(rowIter.hasNext())
{
HSSFRow row = (HSSFRow) rowIter.next();
Iterator cellIter = row.cellIterator();
Vector cellStoreVector=new Vector();
if(row.getRowNum()>0)
{
for (int colnum=0; colnum<colsize; colnum++)
{
HSSFCell cell = (HSSFCell) row.getCell(colnum);
//System.err.println("colsize==="+cell);
if(cell == null)
{
value= "";
}
else
{
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
value = dateFormat.format(cell.getDateCellValue());
}
else
{
double value2 = cell.getNumericCellValue();
if( Math.floor(value2) == value2 )
{
int value3 = (int)value2;
value = ""+value3;
}else{
value = String.valueOf(value2);
}
}
break;
case HSSFCell.CELL_TYPE_STRING:
value = cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_BLANK:
value = "";
break;
}
}
cellStoreVector.addElement(value+"");
}
cellVectorHolder.addElement(cellStoreVector);
}
}
while(rowIter.hasNext())
{
HSSFRow row=(HSSFRow)rowIter.next();
迭代器cellIter=row.cellIterator();
Vector cellStoreVector=新向量();
if(row.getRowNum()>0)
{
对于(int colnum=0;colnum使用文档中描述的FormulaEvaluator
使用FormulaEvaluator评估公式有三种方法
- 计算公式并仅返回结果:计算(单元格)
- 计算公式并用结果替换公式:evaluateInCell(单元格)
- 计算公式并将结果与公式一起写入单元格:计算公式(单元格)
最后一个选项的POI文档报价:
使用FormulaEvaluator.evaluateFormulaCell(单元格)
evaluateFormulaCell(单元格单元格)将检查所提供的单元格是否为公式单元格。如果不是,则不会对其进行任何更改。如果是,则计算公式。公式的值将保存在其旁边,以在excel中显示。公式保留在单元格中,只保留一个新值
函数的返回是公式结果的类型,例如Cell.Cell\u type\u BOOLEAN
虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,则仅链接的答案可能无效。修复:添加文档中的引用
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;
}
}