NPIO读取Excel,Cannot get a numeric value from a error cell和计算框 | 您所在的位置:网站首页 › mula翻译 › 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"; |
CopyRight 2018-2019 实验室设备网 版权所有 |