首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在SpreadsheetGear中,如何检查公式或计算错误?

在SpreadsheetGear中,如何检查公式或计算错误?
EN

Stack Overflow用户
提问于 2014-12-30 01:30:13
回答 2查看 1.4K关注 0票数 1

我使用SpreadsheetGear将工作表上的范围复制到另一个工作表的“输入”范围中,并手动重新计算WorkbookSet。在重新计算后,是否有一种容易检查公式或计算错误的方法?

目标工作簿非常复杂,包含许多依赖于复制的工作表的公式,因此,使用一种简单的全局方法来定位任何计算错误都是有帮助的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-30 18:20:18

所谓“错误”,我猜想您指的是Excel公式错误值,例如#NUM!、#值、#NAME?等等?不幸的是,在重新计算之后,您无法检查工作簿是否包含其中的一个或多个属性。要做到这一点,唯一的方法是自己手动迭代工作簿中的任何相关单元,并检查错误的ValueType。对于一个庞大而复杂的工作簿,我理解这可能是不可行的。

无论如何,对于这种方法,我最好的建议是,如果可能的话,将此错误检查限制在您感兴趣的较小范围或范围内。其次,您可以考虑使用SpreadsheetGear.Advanced.单元格命名空间下的“高性能”API来提高这个例程的性能,而不是使用传统的IRange接口,后者的执行速度可能会稍慢一些。下面是一个演示这种方法的示例。请随时根据您的需求进行修改:

代码语言:javascript
运行
复制
using SpreadsheetGear.Advanced.Cells;
...
private bool RangeContainsErrors(IRange range)
{
    // We obtain a "high performance" IValues object by casting a worksheet
    // to IValues.
    IValues values = (IValues)range.Worksheet;

    // Setup some indexes to help clarify and shorten the for loops.
    int startRow = range.Row;
    int startCol = range.Column;
    int endRow = startRow + range.RowCount;
    int endCol = startCol + range.ColumnCount;

    // Loop through rows of desired range.
    for (int row = startRow; row < endRow; row++)
    {
        // Now loop through columns of desired range.
        for (int col = startCol; col < endCol; col++)
        {
            // Get an IValue object for this cell.
            IValue val = values[row, col];

            // Check to ensure this cell even as a value and if so, check
            // for an Error value type.
            if(val != null && 
               val.Type == SpreadsheetGear.Advanced.Cells.ValueType.Error)
            {
                return true;
            }
        }
    }

    // If we made it this far there weren't any errors.
    return false;
}
票数 1
EN

Stack Overflow用户

发布于 2015-11-08 20:02:48

对于这样的调动,我有一些建议。

  1. 有点离题,但是在需要使用workbookSet.Calculation = SpreadsheetGear.Calculation.Manual;时,可以显式地手动设置workbookSet.Calculate();和触发器计算。
  2. @Tim的回答显示了如何访问IValue。从这里可以读取TextNumber属性来读取正确的值类型。
  3. 如果想设置,可以说是SetTextSetNumnber
  4. 如果单元格为空,则IValue将为空!

高级接口与常规接口不同,我还没有弄清楚如何通过范围名称来寻址单元格。看起来接口不允许这样做,您可以通过基于0的行列索引来索引单元格。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27698466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档