C# 如何以编程方式禁用Excel中的公式错误检查

C# 如何以编程方式禁用Excel中的公式错误检查,c#,excel,formula,C#,Excel,Formula,我尝试通过几个步骤将公式设置为C#中的Excel单元格,但在设置过程中,Excel似乎因公式无效而引发异常。我想知道如何在C#中关闭公式错误检查。谢谢 编辑 公式太长,超过255个字符。 所以我不能一步到位。 必须设置一个简短的公式,然后替换,请参见 请参阅下面的代码 但是我在rng中得到了一个错误,公式=onePart 其中Constants.CUT_LENGTH=253,Constants.MAX_FORMULA_LENGTH=255,Separator=“||” 我试图将EvaluateT

我尝试通过几个步骤将公式设置为C#中的Excel单元格,但在设置过程中,Excel似乎因公式无效而引发异常。我想知道如何在C#中关闭公式错误检查。谢谢

编辑 公式太长,超过255个字符。 所以我不能一步到位。 必须设置一个简短的公式,然后替换,请参见

请参阅下面的代码 但是我在rng中得到了一个错误,公式=onePart

其中Constants.CUT_LENGTH=253,Constants.MAX_FORMULA_LENGTH=255,Separator=“||” 我试图将EvaluateToError设置为false,但仍然会得到一个错误

                XLApp.ErrorCheckingOptions.InconsistentFormula = false;
                XLApp.ErrorCheckingOptions.EvaluateToError = false;

                SetFormula(rangeFunction, formula);  


    public static void SetFormula(Range rng, string origFormula)
    {
        int i = 0;
        foreach (var onePart in CutStringIntoSubstrings(origFormula))
        {                
            if(i==0)
            {
                rng.Formula = onePart;
                i++;
            }
            else
            {
                rng.Replace(Constants.Separator, onePart);
            }
        }
    }
    public static IEnumerable<string> CutStringIntoSubstrings(string origFormula)
    {
        if (origFormula == null) yield return string.Empty;
        if (string.IsNullOrEmpty(origFormula)) yield return string.Empty;
        if (origFormula.Length <= Constants.MAX_FORMULA_LENGTH) yield return origFormula;

        int startIdx = 0;
        int endIdx = startIdx + Constants.CUT_LENGTH;
        while(endIdx < origFormula.Length)
        {
            var substr = origFormula.Substring(startIdx, Constants.CUT_LENGTH);
            if(startIdx + Constants.CUT_LENGTH < origFormula.Length)
            {
                substr += Constants.Separator;
            }
            yield return substr;
            startIdx += Constants.CUT_LENGTH;
            endIdx = startIdx + Constants.CUT_LENGTH;
        }
        if (startIdx < origFormula.Length) yield return origFormula.Substring(startIdx);
    }
XLApp.ErrorCheckingOptions.InconsistentFormula=false;
XLApp.ErrorCheckingOptions.EvaluateToError=false;
SetFormula(范围函数、公式);
公共静态无效设置公式(范围、字符串或公式)
{
int i=0;
foreach(将切割字符串中的一部分变为子字符串(原始公式))
{                
如果(i==0)
{
rng.公式=一部分;
i++;
}
其他的
{
更换(常数分离器,一部分);
}
}
}
公共静态IEnumerable CutstringToSubstrings(字符串或公式)
{
if(origFormula==null)产生返回字符串.Empty;
if(string.IsNullOrEmpty(origFormula))产生返回string.Empty;

如果(origFormula.Length,您可以参考本文

http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.error.ignore(v=office.11)


可能会有帮助:)

为什么不先建立公式,然后将其设置到单元格中?你能展示一些代码吗?好的,我现在明白了。我假设你使用的是Excel 2003,因为我可以在Excel 2007中设置很长的公式,没有问题。也许你的公式可以缩小?或者如果不能,可以在一个单元格中计算部分公式,然后在r中使用结果吗在另一个单元格中的公式?