使用CalculationState延迟Excel事件

时间:2015-04-25 22:49:23

标签: c# excel

据我了解,您可以使用“计算”​​状态检查Excel是否仍在计算(即刷新查询)。所以我在这行中添加了我的语法,以确保在工作簿中刷新所有查询之前不会保存工作簿(我甚至创建了一个带有1个查询的测试工作簿,并且在ONE刷新之前它已保存)。我是否错误地设置了这个,还是我误解了计算状态的目的?

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)
{

}

1 个答案:

答案 0 :(得分:2)

CalculationState指的是Excel计算引擎的状态(Pending,Calculating,Done),而不是查询,它们不是计算引擎的集成部分(除了运行查询可能会弄脏单元格,从而触发计算)。