Async ArrayFormula 仍然冻结 Excel
Async ArrayFormula still freezes Excel
我是 运行 一个异步使用 ExcelAsyncUtil.Run 的 ArrayFormula。此公式有大约 20 列和 1000-5000 行。
它仍然冻结我的 excel,我认为是在 ExcelDNA converts/renders 我的 "wait message" 时。我怎样才能重构它以使其更好地工作?
这是一些示例代码。
[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;
}
}
Excel-DNA 异步实现基于 Excel 的 RTD 功能。从数组公式调用时,RTD 无法正常工作。
我建议您将您的函数拆分为一个异步函数,该函数 returns 一个 'handle' (同时将数据内部存储在字典或其他东西中)和第二个(非异步)函数解压该数据,将句柄作为输入并从内部存储返回数组。
使用起来有点不方便,因为你需要一个额外的电池来固定手柄,但会更可靠。
我是 运行 一个异步使用 ExcelAsyncUtil.Run 的 ArrayFormula。此公式有大约 20 列和 1000-5000 行。
它仍然冻结我的 excel,我认为是在 ExcelDNA converts/renders 我的 "wait message" 时。我怎样才能重构它以使其更好地工作?
这是一些示例代码。
[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;
}
}
Excel-DNA 异步实现基于 Excel 的 RTD 功能。从数组公式调用时,RTD 无法正常工作。
我建议您将您的函数拆分为一个异步函数,该函数 returns 一个 'handle' (同时将数据内部存储在字典或其他东西中)和第二个(非异步)函数解压该数据,将句柄作为输入并从内部存储返回数组。
使用起来有点不方便,因为你需要一个额外的电池来固定手柄,但会更可靠。