Excel抛出异常HRESULT:0x800A03EC,同时用户仍在键入单元格并更改单元格值

时间:2016-02-12 12:19:14

标签: c# excel excel-interop

我在C#中创建一个Excel插件,然后点击添加按钮更改一些单元格值。它工作顺利,但是,我注意到如果用户试图在任何单元格中键入内容(不仅是我将值更改为),它将始终抛出HRESULT: 0x800A03EC异常。

我的代码很简单,例如我只用这段代码对此进行了测试:

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

当我点击一个随机单元格时,输入" foo",但是我没有点击工作表上的任何地方,我没有完成写作" foo"而是我点击buttonFoo虽然我仍然专注于我的单元格,但却抛出了这个异常。

这张图片可以解释我尝试做什么,我会点击图片中的“测试”按钮,同时仍然按这样输入:

enter image description here

我认为如果我试图在特定单元格中键入内容并且特定单元格在我的代码中也会发生变化,则会发生此异常。但事实并非如此。我尝试过选择一个未使用的单元格,如下所示:

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

没有帮助。我尝试过发送ESC键取消用户输入:

excelApp.SendKeys("{ESCAPE}");

我对此进行了测试,它实际上会发送Escape,但它仍然会抛出异常。我完全没有想法,也没有找到任何关于这个问题的内容。我的意思是我可以用try / catch寻找这个例外来包围一切,但那太可怕了......任何人都知道该怎么做?

1 个答案:

答案 0 :(得分:1)

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

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";
    }
}