首页 新闻 赞助 找找看

NPOI :EvaluateFormulaCell(cell) 评估单元格结果的函数报数组越界错误

0
悬赏园豆:100 [待解决问题]

从公式类型的单元格读取值时,需要先调用评估函数得到结果,部分公式单元格返回了数组越界的错误。

翻阅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)


baize97的主页 baize97 | 初学一级 | 园豆:102
提问于:2021-11-03 11:09
< >
分享
所有回答(2)
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();
ms_doudou | 园豆:1166 (小虾三级) | 2021-11-04 10:03

当然可以,我去试试

支持(0) 反对(0) baize97 | 园豆:102 (初学一级) | 2021-11-04 10:22

@baize97: Spire高阶api付费,不如阿里开源的EasyExcel。

支持(0) 反对(0) 绝不是木头 | 园豆:507 (小虾三级) | 2021-11-11 15:33
0

将公式单元格格式转成字符串格式直接读出来就好了,参考 https://blog.csdn.net/u010593753/article/details/88104753?spm=1001.2014.3001.5502

jqw2009 | 园豆:2439 (老鸟四级) | 2021-11-15 10:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册