7

(C# を使用して) ディレクトリをループし、そこにあるすべての Excel シートを更新します。私が使う:

Workbook.RefreshAll();

Workbook.RefreshAll()ステートメントが終了するのをどのように待つことができますか?

問題は次FileAthen Workbook.RefreshAll()とおりFileBですFileA。私が見つけた唯一の解決策は、次のようなものを呼び出すことです

System.Threading.Thread.Sleep(20000);

私はとてもかわいくないと思った...

誰かが待つより良い方法を知っていますか?

4

4 に答える 4

2

を調べて、すべての のプロパティを にWorkbook設定すると、先に進む前に終了する必要があります。BackgroundQueryQueryTablefalseRefreshAll

foreach (Worksheet worksheet in workbook.Worksheets)
{
    foreach (QueryTable table in worksheet.QueryTables)
        table.BackgroundQuery = false;
}

//This will finish executing before moving on
workbook.RefreshAll();
于 2013-09-13T14:50:15.633 に答える
2

以下のコードは、Excel がバックグラウンド クエリを実行して SQL Server/MS Access からデータを取得する必要がある場合に完全に機能し、クエリが成功するまで待機します。

public void RefreshSheet(Excel.Application Excel, Excel.Workbook WB)
{
    WB.RefreshAll();
    Excel.Application.CalculateUntilAsyncQueriesDone();
    WB.save();
}

ここで、WB はワークブック、Excel は Excel アプリケーションです。

于 2018-03-09T11:11:25.150 に答える