NPIO读取Excel,Cannot get a numeric value from a error cell和计算框 您所在的位置:网站首页 mula翻译 NPIO读取Excel,Cannot get a numeric value from a error cell和计算框

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

2023-12-18 11:57| 来源: 网络整理| 查看: 265

这里主要解决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";


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有