7

我想遍历一个目录(使用 C#)并刷新那里的所有 Excel 工作表。我用:

Workbook.RefreshAll();

我怎样才能等待Workbook.RefreshAll()语句完成?

问题是:我打开FileAthen Workbook.RefreshAll()然后打开FileB- 刷新FileA被终止。我找到的唯一解决方案是调用类似

System.Threading.Thread.Sleep(20000);

我觉得很不可爱...

有人知道更好的等待方式吗?

4

4 回答 4

3

2016 年 5 月 31 日更新...

谢谢你的帮助。我找到了以下解决方案:

foreach (MSExcel.WorkbookConnection cnn in wb.Connections)
{
    if (cnn.Type.ToString() == "xlConnectionTypeODBC")
    {
        cnn.ODBCConnection.BackgroundQuery = false;
    }
    else
    {
        cnn.OLEDBConnection.BackgroundQuery = false;
    }
}

坦率

于 2013-09-16T07:53:47.380 回答
2

如果您检查Workbook并将所有s的BackgroundQuery属性设置为,则应在继续之前完成。QueryTablefalseRefreshAll

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 回答
1

也许您可以查询状态:

Application.CalculationState =xldone

对于文档看这里: http: //msdn.microsoft.com/en-us/library/office/bb220901 (v=office.12).aspx

于 2013-09-13T14:38:07.067 回答