Async ArrayFormula仍然冻结Excel

时间:2016-05-18 10:06:52

标签: asynchronous excel-dna

我使用ExcelAsyncUtil.Run异步运行ArrayFormula。该公式有大约20列和1000-5000行。

它仍然会冻结我的Excel,我认为这是ExcelDNA转换/呈现我的“等待消息”的时候。我怎样才能重构这个以更好地工作?

以下是一些示例代码。

    [ExcelFunction(
      Name = "MySlowFunction",
      Description = "...",
      IsHidden = false)]
    public static object MySlowFunction(DateTime reportDate, object[,] filters)
    {
        var result = ExcelAsyncUtil.Run("MySlowFunction",
            new object[] { reportDate, filters },
            () =>
            {
                try
                {
                    return // Run slow query to server here....
                }
                catch (Exception asyncError)
                {
                    return new object[,] { { asyncError.Message } };
                }
            });

        return ParseResult(result);
    }


    public static object ParseResult(object result)
    {
        if (result.Equals(ExcelError.ExcelErrorNA))
        {
            return "Wait...";
        }
        else
        {
            return result;
        }
    } 

1 个答案:

答案 0 :(得分:1)

Excel-DNA异步实现基于Excel的RTD功能。从数组公式调用RTD时效果不佳。

我建议您将函数拆分为异步函数,该函数返回单个句柄' (在内部将数据存储在字典或其他内容中)和第二个(非异步)函数解包该数据,将句柄作为输入并从内部存储返回数组。

使用起来有点不方便,因为你需要一个额外的单元来握住手柄,但会更加可靠。