Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何读取Excel中单元格类型为公式的数据_Java_Excel - Fatal编程技术网

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;
    }
}