C# 使用CalculationState延迟Excel事件
据我所知,您可以使用计算状态检查Excel是否仍在计算(即刷新查询)。因此,我在语法中添加了这一行,以确保在工作簿中的所有查询都刷新之前不会保存工作簿(我甚至创建了一个包含1个查询的测试工作簿,并且在该查询刷新之前已经保存)。我是否设置不正确,或者我是否错误地理解了计算状态的目的C# 使用CalculationState延迟Excel事件,c#,excel,C#,Excel,据我所知,您可以使用计算状态检查Excel是否仍在计算(即刷新查询)。因此,我在语法中添加了这一行,以确保在工作簿中的所有查询都刷新之前不会保存工作簿(我甚至创建了一个包含1个查询的测试工作簿,并且在该查询刷新之前已经保存)。我是否设置不正确,或者我是否错误地理解了计算状态的目的 public Form_Main() { InitializeComponent(); backgroundworker1.WorkerReportsProgress = true; backgrou
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计算引擎的状态(挂起、计算、完成),而不是查询,它们不是计算引擎的一个组成部分(运行查询可能会弄脏单元格,从而触发计算除外)