poi 读取excel 怎么样处理自动求和的函数
比如我ecxel里那个函数SUM(D20:L20)是这个求D20到L20的和可我读进来也是这个函数原样没变我怎么才能拿到它求和后的值啊各们大哥大姐帮帮忙啊...
比如我ecxel里那个函数SUM(D20:L20) 是这个 求D20到L20的和 可我读进来也是这个函数原样没变 我怎么才能拿到它求和后的值 啊 各们大哥大姐帮帮忙啊
展开
4个回答
展开全部
如果单元格所存的内容为函数,则通过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定义的函数,就需要另外处理了。
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定义的函数,就需要另外处理了。
参考资料: http://poi.apache.org/spreadsheet/eval.html
展开全部
先复制相应的单元格或者工作表
粘贴的时候选择仅数值,不复制公式
就全部变为数值型数据了
粘贴的时候选择仅数值,不复制公式
就全部变为数值型数据了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2010-09-23
展开全部
=D20+L20
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
完整的如下:
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;
}
}
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;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询