从公式类型的单元格读取值时,需要先调用评估函数得到结果,部分公式单元格返回了数组越界的错误。
翻阅NPOI 评估函数相关代码 发现问题出现在一下代码
int startIx = cce.GetHashCode() % arr.Length;
for (int i = startIx; i < arr.Length; i++)
此处的startIx 可能为负数导致的数组越界。 没有知道解决方案,各位同学帮忙看看。
一下是部分DEBUGLOG
IndexOutOfRangeException: Index was outside the bounds of the array.
NPOI.SS.Formula.FormulaCellCacheEntrySet.AddInternal (NPOI.SS.Formula.CellCacheEntry[] arr, NPOI.SS.Formula.CellCacheEntry cce) (at <99794dfbb4dc4cc184c11b23b5708e9c>:0)
NPOI.SS.Formula.FormulaCellCacheEntrySet.Add (NPOI.SS.Formula.CellCacheEntry cce) (at <99794dfbb4dc4cc184c11b23b5708e9c>:0)
NPOI.SS.Formula.CellCacheEntry.AddConsumingCell (NPOI.SS.Formula.FormulaCellCacheEntry cellLoc) (at <99794dfbb4dc4cc184c11b23b5708e9c>:0)
NPOI.SS.Formula.FormulaCellCacheEntry.ChangeConsumingCells (NPOI.SS.Formula.CellCacheEntry[] usedCells) (at <99794dfbb4dc4cc184c11b23b5708e9c>:0)
NPOI.SS.Formula.FormulaCellCacheEntry.SetSensitiveInputCells (NPOI.SS.Formula.CellCacheEntry[] sensitiveInputCells) (at <99794dfbb4dc4cc184c11b23b5708e9c>:0)
如果你考虑其他API的话,可以用Free Spire.XLS, nuget可以下载
这是读取单元格公式和公式值的一个简单例子:
Workbook workbook = new Workbook();
workbook.LoadFromFile(@"Formulas.xlsx");
Worksheet sheet = workbook.Worksheets[0];
//读取公式
string formula = sheet.Range["A1"].Formula;
//读取公式值
string formulaValue = sheet.Range["A1"].FormulaValue.ToString();
当然可以,我去试试
@baize97: Spire高阶api付费,不如阿里开源的EasyExcel。
将公式单元格格式转成字符串格式直接读出来就好了,参考 https://blog.csdn.net/u010593753/article/details/88104753?spm=1001.2014.3001.5502