通过dotnet控制excel?

时间:2013-06-06 15:51:17

标签: c# .net excel excel-vba async-await vba

我正在尝试运行一个将数据插入表中的存储过程。这样做之后,我刷新了存储在本地计算机中的excel(这个excel与数据连接到数据库)   我有问题,因为刷新消耗时间,之后我想保存excel - 这是早期调用。刷新完成后,我想从excel中获得控制权。

我可以通过C#读取excel的状态吗?

我一直在尝试使用异步代码阻止当前线程并刷新其他线程中的excel。这种方法的问题是线程正在立即返回(task.iscompleted返回true),即使刷新仍在运行。

我该如何避免这种情况?

此外:

  • 我可以单独刷新床单吗?
  • 刷新完成后,我可以将控制权传回.NET吗?

这是刷新任务的代码:

    private static async Task refreshExcelAsync(Excel.Workbook sampleWorkBook)
    {

        Task t = new Task
        (
            () =>
            {
                sampleWorkBook.RefreshAll();

            }
        );
        t.Start();

        await t;
    }

我正在使用以下方法调用此函数:

 Task refreshExcelTask = refreshExcelAsync(sampleWorkBook);
 Task t = await Task.WhenAny(refreshExcelTask);

在此调用之后,我根据条件t.IsCompleted

调用saveExcel任务

但是这个条件总是回归真实!

1 个答案:

答案 0 :(得分:1)

您可以从QueryTables的{​​{1}}抓取Worksheets。从那里,您可以刷新它们,通过Workbook来禁用background refresh。您还可以订阅AfterRefresh事件,以便在后台刷新完成时收到通知。