据我了解,您可以使用“计算”状态检查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)
{
}
答案 0 :(得分:2)
CalculationState指的是Excel计算引擎的状态(Pending,Calculating,Done),而不是查询,它们不是计算引擎的集成部分(除了运行查询可能会弄脏单元格,从而触发计算)。