我正在C#中创建一个Excel加载项,并且通过单击加载项按钮来更改某些单元格值。它运行顺利,但是,我注意到,如果用户尝试在ANY单元格中键入某些内容(不仅是我要更改其值的单元格),它将始终抛出HRESULT: 0x800A03EC
异常。
我的代码很简单,例如,我仅用以下这段代码进行了测试:
private void buttonFoo_Click(object sender, RibbonControlEventArgs e)
{
var ws = Globals.ThisAddIn.Application.ActiveSheet;
ws.Range["A1"].Value = "bar";
}
当我单击一个随机单元格时,键入“ foo”,但是我没有单击工作表上的任何地方,没有完成写“ foo”的操作,而是在我仍然专注于单元格的同时单击了buttonFoo抛出此异常。
这张图片可以解释我要做什么,我将在图片中单击“ Test”按钮,同时仍然像这样输入:
我以为如果我尝试在特定的单元格中键入内容,并且我也在代码中更改了该特定的单元格,则会发生此异常。但事实并非如此。我尝试选择一个不使用的单元格,如下所示:
ws.Range["B1"].Select();
没有帮助。我尝试发送ESC键来取消用户键入:
excelApp.SendKeys("{ESCAPE}");
我对此进行了测试,它实际上会发送Escape,但仍然会引发异常。我完全没有主意,也没有找到有关此问题的任何信息。我的意思是我可以用try / catch包围所有内容以查找此异常,但这太可怕了。任何人都知道该怎么做?
尝试使用类似的方法来查看应用程序是否繁忙:
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";
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句