NPIO读取Excel,Cannot get a numeric value from a error cell和计算框

这里主要解决2个问题;

第一:Cannot get a numeric value from a error cell报错,也就是excel的框里是{null},然后我们取值的时候报的错。

这种情况一般用celltype==Error来规避。

第二:计算框,如:《=(J8*K8+L8)*M8   》直接获取值会得到“0”,通过如下红色代码可以规避;

HSSFFormulaEvaluator 接口的方法 EvaluateInCell()计算公式单元格的结果保存下来,但不改变公式;

这样就能获取计算后的值了。

今天遇到一个比较坑的情况,就是第二种里面包含第一种的异常

                wk = new HSSFWorkbook(stream);

                int Sheetcount = wk.NumberOfSheets;             

                HSSFFormulaEvaluator e = new HSSFFormulaEvaluator(wk);                               

                var cell = row.GetCell(j);

                                string value = "";
                                if (cell != null)//读取该行的第j列数据
                                {
                                    switch (cell.CellType)
                                    {
                                        case CellType.Blank: //空数据类型处理
                                            value = "0";
                                            break;
                                        case CellType.String: //字符串类型
                                            value = cell.StringCellValue;
                                            break;
                                        case CellType.Numeric: //数字类型  
                                                value = cell.NumericCellValue.ToString();                                            
                                            break;
                                        case CellType.Formula:
                                            switch (row.GetCell(j).CachedFormulaResultType)
                                            {
                                                case CellType.String:
                                                    string strFORMULA = row.GetCell(j).StringCellValue;
                                                    if (strFORMULA != null && strFORMULA.Length > 0)
                                                    {
                                                        value = strFORMULA.ToString();
                                                    }
                                                    else
                                                    {
                                                        value = null;
                                                    }
                                                    break;
                                                case CellType.Numeric:
                                                    cell = e.EvaluateInCell(cell);
                                                    //下面这里出现了个问题,坑啊!cell原类型是Formula,CachedFormulaResultType后是Numeric,因为是计算框,EvaluateInCell后才露出真面目:Error!!!所以需要加下面的判断
                                                      if (cell.CellType != CellType.Error)
                                                        value = Convert.ToString(row.GetCell(j).NumericCellValue);
                                                    else
                                                        value = "0";
                                                    break;
                                                case CellType.Boolean:
                                                    value  = Convert.ToString(row.GetCell(j).BooleanCellValue);
                                                    break;
                                                case CellType.Error:
                                                    value = ErrorEval.GetText(row.GetCell(j).ErrorCellValue);
                                                    break;
                                                default:
                                                    value = "";
                                                    break;
                                            }
                                            break;
                                        default:
                                            value = "0";
                                            break;
                                    }
                                }
                                else
                                    value = "0";
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值