范围选择和/或使用Excel中的InputBox';C#上的VSTO加载项导致错误并生成失败

范围选择和/或使用Excel中的InputBox';C#上的VSTO加载项导致错误并生成失败,c#,excel,wpf,vsto,C#,Excel,Wpf,Vsto,在此声明是很奇怪的,但仍然是一个事实,在我的一个VSTO项目中,虽然下面的一段简单代码工作得很好,但在另一个项目中,虽然它几乎完全相同,即分配给功能区的按钮,但后一个项目仅在生成失败时在Visual Studio的页脚中反映消息,根据相同的图像,即没有突出显示错误 private void button1_Click(object sender, RibbonControlEventArgs e) { Microsoft.Office.Interop.Excel.

在此声明是很奇怪的,但仍然是一个事实,在我的一个VSTO项目中,虽然下面的一段简单代码工作得很好,但在另一个项目中,虽然它几乎完全相同,即分配给功能区的按钮,但后一个项目仅在生成失败时在Visual Studio的页脚中反映消息,根据相同的图像,即没有突出显示错误

    private void button1_Click(object sender, RibbonControlEventArgs e)
    {
        Microsoft.Office.Interop.Excel.Range RG = Globals.ThisAddIn.Application.InputBox("Select your desired cells:", Type: 8);
        MessageBox.Show(RG.Address);
        Microsoft.Office.Interop.Excel.Range RG2 = Globals.ThisAddIn.Application.Selection;
        MessageBox.Show(RG2.Address);
    }

原因可能是什么

上述两个项目之间的唯一区别是,在后一个项目中,我尝试使用与YouTube上的视频相同的WPF表单,即:

通过谷歌搜索,我找到了使用以下行进行选择的解决方案,但无法为应用程序找到类似的解决方案。InputBox

Microsoft.Office.Interop.Excel.Range RG2 = Globals.ThisAddIn.Application.ActiveWindow.RangeSelection
private void button1_Click(object sender, RibbonControlEventArgs e)
{
    Microsoft.Office.Interop.Excel.Range RG = (Microsoft.Office.Interop.Excel.Range)Globals.ThisAddIn.Application.InputBox("Select your desired cells:", Type: 8);
    MessageBox.Show(RG.Address);
    Microsoft.Office.Interop.Excel.Range RG2 = (Microsoft.Office.Interop.Excel.Range)Globals.ThisAddIn.Application.Selection;
    MessageBox.Show(RG2.Address);
}
即使放置一个led到现在都没有回复,:-(

如有任何建议/帮助,将不胜感激


提前感谢。

这很奇怪,但足够真实。到目前为止,Visual Studio没有反映出任何错误,但今天当我再次尝试在VSTO中实现WPF时,它最终反映出有一个铸造错误

上述错误也只出现了几秒钟,然后又消失了,同样的旧页脚反映了构建失败

当我在谷歌上搜索时,结果无疑是如此,而且收获颇丰

因此,将我的代码更改为以下代码确实会导致成功构建:

Microsoft.Office.Interop.Excel.Range RG2 = Globals.ThisAddIn.Application.ActiveWindow.RangeSelection
private void button1_Click(object sender, RibbonControlEventArgs e)
{
    Microsoft.Office.Interop.Excel.Range RG = (Microsoft.Office.Interop.Excel.Range)Globals.ThisAddIn.Application.InputBox("Select your desired cells:", Type: 8);
    MessageBox.Show(RG.Address);
    Microsoft.Office.Interop.Excel.Range RG2 = (Microsoft.Office.Interop.Excel.Range)Globals.ThisAddIn.Application.Selection;
    MessageBox.Show(RG2.Address);
}

Alhamdulillah!

我需要更多关于这个问题的解释,比如当您构建项目时Excel应用程序是否打开或其实例是否在后台运行(您可以使用任务管理器进行检查)。根据我的理解,当您使用下面的代码Microsoft.Office.Interop.Excel.Range RG2=Globals.ThisAddIn.Application.Selection时,Application.Selection将返回对象实例。并且Excel.Range不是必需的。为此,您需要进行类型转换和空值检查,否则将在运行时抛出错误。要解决您的问题,您还可以做一件事,在构建解决方案/项目之前,首先清理解决方案/项目,然后构建它。或者转到文件夹目录,从所有项目文件夹中删除bin和obj文件夹,然后构建解决方案/项目