使用CalculationState延迟Excel事件

这是我的理解,你可以检查Excel是否仍在计算(即刷新查询)使用计算状态。 所以我在这一行中添加了我的语法,以确保在工作簿中刷新所有查询之前,工作簿不会被保存(我甚至创build了一个带有1个查询的testing工作簿,并且在这个工作簿被刷新之前保存)。 我错误地设置了这个,还是误解了计算状态的目的?

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计算引擎(Pending,Calculating,Done)的状态,而不是查询,它不是计算引擎的集成部分(除了运行查询可能使单元格变脏并因此触发计算)。