Excel会抛出exceptionHRESULT:0x800A03EC而用户仍在键入一个单元格和单元格值更改

我正在C#中创build一个Excel插件,并使用插件button单击来更改一些单元格值。 它工作顺利,但是,我注意到,如果用户试图在任何单元格(不仅是我改变值的东西),它总是会抛出HRESULT: 0x800A03ECexception。

我的代码很简单,例如我只用这段代码testing过了:

 private void buttonFoo_Click(object sender, RibbonControlEventArgs e) { var ws = Globals.ThisAddIn.Application.ActiveSheet; ws.Range["A1"].Value = "bar"; } 

当我点击一个随机的单元格时,input“foo”,但是我没有点击工作表上的任何地方,我没有写完“foo”,而是点击buttonFoo,而我仍然集中在我的单元格中,抛出这个exception。

这张图片可以解释我想要做什么,我将点击图片上的testingbutton,同时仍然打字如下:

在这里输入图像说明

我以为这个例外发生了,如果我想在特定的单元格中input某些内容,而且特定的单元格也在我的代码中更改。 但事实并非如此。 我试过select一个不使用的单元格,如下所示:

 ws.Range["B1"].Select(); 

没有帮助。 我试着发送ESC键取消用户input:

 excelApp.SendKeys("{ESCAPE}"); 

我testing了这个,它实际上会发送Escape,但是它仍然会抛出一个exception。 我完全没有想法,并没有发现任何关于这个问题。 我的意思是我可以用try / catch寻找这个exception来包围所有东西,但是这太可怕了。任何人都知道该怎么做?

尝试这样的事情,而不是看看应用程序是否忙:

 bool XLAppBusy() { if (Globals.ThisAddIn.Application.Interactive == false) { return false; } try { Globals.ThisAddIn.Application.Interactive = false; Globals.ThisAddIn.Application.Interactive = true; } catch { return true; } return false; } private void buttonFoo_Click(object sender, RibbonControlEventArgs e) { if (XLAppBusy() == false) { ws.Range["A1"].Value = "bar"; } }