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

比如我ecxel里那个函数SUM(D20:L20)是这个求D20到L20的和可我读进来也是这个函数原样没变我怎么才能拿到它求和后的值啊各们大哥大姐帮帮忙啊... 比如我ecxel里那个函数SUM(D20:L20) 是这个 求D20到L20的和 可我读进来也是这个函数原样没变 我怎么才能拿到它求和后的值 啊 各们大哥大姐帮帮忙啊 展开
 我来答
dinggx
2010-09-23 · TA获得超过420个赞
知道小有建树答主
回答量:417
采纳率:0%
帮助的人:395万
展开全部
如果单元格所存的内容为函数,则通过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定义的函数,就需要另外处理了。

参考资料: http://poi.apache.org/spreadsheet/eval.html

绝妙又坚定灬雏菊r
2010-09-13 · TA获得超过1079个赞
知道小有建树答主
回答量:485
采纳率:0%
帮助的人:282万
展开全部
先复制相应的单元格或者工作表
粘贴的时候选择仅数值,不复制公式
就全部变为数值型数据了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2010-09-23
展开全部
=D20+L20
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友5349a7a
2012-10-09 · 超过14用户采纳过TA的回答
知道答主
回答量:89
采纳率:0%
帮助的人:28.6万
展开全部
完整的如下:
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;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式