poi 读取excel 怎么样处理自动求和的函数

2025-02-24 05:28:17
推荐回答(4个)
回答1:

如果单元格所存的内容为函数,则通过poi得到的cell type为Cell.CELL_TYPE_FORMULA;解析时的函数:
switch (cell.getCellType()) {
case Cell.CELL_TYPE_BOOLEAN:
System.out.println(cellValue.getBooleanValue());
break;
case Cell.CELL_TYPE_NUMERIC:
System.out.println(cellValue.getNumberValue());
break;
case Cell.CELL_TYPE_STRING:
System.out.println(cellValue.getStringValue());
break;
case Cell.CELL_TYPE_BLANK:
break;
case Cell.CELL_TYPE_ERROR:
break;

case Cell.CELL_TYPE_FORMULA:
CellValue cellValue = evaluator.evaluate(cell);
switch (cellValue.getCellType()) {
case Cell.CELL_TYPE_BOOLEAN:
System.out.println(cellValue.getBooleanValue());
break;
case Cell.CELL_TYPE_NUMERIC:
System.out.println(cellValue.getNumberValue());
break;
case Cell.CELL_TYPE_STRING:
System.out.println(cellValue.getStringValue());
break;
case Cell.CELL_TYPE_BLANK:
break;
case Cell.CELL_TYPE_ERROR:
break;

// CELL_TYPE_FORMULA will never happen
case Cell.CELL_TYPE_FORMULA:
break;
}

}
就是说要进行多一层的判断,poi会通过其内部实现的函数去解析excel的函数;所以这里可以解析excel函数,而如果是你自己用VB定义的函数,就需要另外处理了。

回答2:

先复制相应的单元格或者工作表
粘贴的时候选择仅数值,不复制公式
就全部变为数值型数据了

回答3:

=D20+L20

回答4:

完整的如下:
HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(excelFileName));
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
CellValue cellValue = evaluator.evaluate(cell);//cell是单元格。。
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_BOOLEAN:
value=cellValue.getBooleanValue();
System.out.println(cellValue.getBooleanValue());
break;
case HSSFCell.CELL_TYPE_NUMERIC:
value=cellValue.getNumberValue();
System.out.println(cellValue.getNumberValue());
break;
case HSSFCell.CELL_TYPE_STRING:
value=cellValue.getStringValue();
System.out.println(cellValue.getStringValue());
break;
case HSSFCell.CELL_TYPE_BLANK:
break;
case HSSFCell.CELL_TYPE_ERROR:
break;

case HSSFCell.CELL_TYPE_FORMULA:
switch (cellValue.getCellType()) {
case HSSFCell.CELL_TYPE_BOOLEAN:
value=cellValue.getBooleanValue();
break;
case HSSFCell.CELL_TYPE_NUMERIC:
value=cellValue.getNumberValue();
break;
case HSSFCell.CELL_TYPE_STRING:
value=cellValue.getStringValue();
break;
case HSSFCell.CELL_TYPE_BLANK:
break;
case HSSFCell.CELL_TYPE_ERROR:
break;

// CELL_TYPE_FORMULA will never happen
case HSSFCell.CELL_TYPE_FORMULA:
break;
}
}