0
ExcelAsyncUtil.Runを使用して非同期にArrayFormulaを実行しています。この数式には約20列と1000〜5000行があります。非同期ArrayFormulaはまだExcelをフリーズします
それでも私の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;
}
}
ありがとうGovert。これは私がこれを実装するために使用した方法です。私はメモリリークが少し心配です。非同期関数を呼び出すセルが変更された場合、辞書をクリアする簡単な方法を知っていますか? – Samuel
ExcelAsyncUtil.Runを使用する代わりに、IObservableでExcelAsyncUtil.Observeを使用すると、Disposeは確実にクリーンアップできます。このアドインを例として参照してください:https://github.com/ratesquant/ACQ/tree/master/ACQ.Excel/Handles – Govert