C# 使用CalculationState延迟Excel事件

C# 使用CalculationState延迟Excel事件,c#,excel,C#,Excel,据我所知,您可以使用计算状态检查Excel是否仍在计算(即刷新查询)。因此,我在语法中添加了这一行,以确保在工作簿中的所有查询都刷新之前不会保存工作簿(我甚至创建了一个包含1个查询的测试工作簿,并且在该查询刷新之前已经保存)。我是否设置不正确,或者我是否错误地理解了计算状态的目的 public Form_Main() { InitializeComponent(); backgroundworker1.WorkerReportsProgress = true; backgrou

据我所知,您可以使用计算状态检查Excel是否仍在计算(即刷新查询)。因此,我在语法中添加了这一行,以确保在工作簿中的所有查询都刷新之前不会保存工作簿(我甚至创建了一个包含1个查询的测试工作簿,并且在该查询刷新之前已经保存)。我是否设置不正确,或者我是否错误地理解了计算状态的目的

public Form_Main()
{
   InitializeComponent();
   backgroundworker1.WorkerReportsProgress = true;
   backgroundworker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
   backgroundWorker1_ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);
}

private void btnOpenRefreshSave_Click()
{
   backgroundWorker1_RunWorkerAsync();
}

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
   Excel.Application exApp;
   Excel._Workbook exBook;
   Excel._Worksheet exSheet;

   exBook = (Excel._Workbook)(exApp.WOrkbooks.Open("C:\\Book1.xlsx")); 
   exSheet = (Excel._Worksheet)(exBook.ActiveSheet);
   //This is the line of code that often times takes a while
   exBook.RefreshAll();
   //end of trouble line
   if (exApp.CalculationState == Excel.XlCalculationState.xlDone)
    {
        exBook.SaveAs("C:\\Updated_Book1.xlsx");
    }
}

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{

}

CalculationState指的是Excel计算引擎的状态(挂起、计算、完成),而不是查询,它们不是计算引擎的一个组成部分(运行查询可能会弄脏单元格,从而触发计算除外)