无法强制转换类型为';系统。共对象';至接口类型';Excel."工作簿';

无法强制转换类型为';系统。共对象';至接口类型';Excel."工作簿';,excel,.net-3.5,com,migration,.net-1.1,Excel,.net 3.5,Com,Migration,.net 1.1,我正在将一个C#dotnetv1.1应用程序升级到3.5,这是我第一次在3.5下运行时遇到这个错误。这是一个在生产中运行多年的应用程序,在1.1版本的桌面上运行,所以我假设excel COM API在1.1和3.5版本之间发生了一些变化 完全例外: InvalidClassCastException was unhandled Unable to cast COM object of type 'System.__ComObject' to interface type 'Excel._Work

我正在将一个C#dotnetv1.1应用程序升级到3.5,这是我第一次在3.5下运行时遇到这个错误。这是一个在生产中运行多年的应用程序,在1.1版本的桌面上运行,所以我假设excel COM API在1.1和3.5版本之间发生了一些变化

完全例外:

InvalidClassCastException was unhandled
Unable to cast COM object of type 'System.__ComObject' to interface type 'Excel._Workbook'. 
此操作失败,因为由于以下错误,对IID为“{000208DA-0000-0000-C000-0000000000 46}”的接口的COM组件的QueryInterface调用失败: 不支持此类接口(来自HRESULT:0x80004002(E_NOINTERFACE)的异常)

代码:


我如何解决这个问题?我尝试按照MSDN Social上的建议将Excel.ApplicationClass重命名为Excel.Application,但没有成功:(

结果表明,答案是在工作表上调用activate,而不是在工作簿上调用activate,oops;-)


一本书是一组纸。将工作表投射到工作簿上会产生巨大的轰隆声。这对我来说是很神秘的,以前是如何工作的。一般来说。。。不要在PIA中使用前缀为
的类(和一些接口?)。这些应该被视为“内部”——PIA的等级结构很可能已经发生了变化。
Excel.ApplicationClass excel = new Excel.ApplicationClass();
excel.Application.Workbooks.Add(true);
((Excel.Range)excel.Cells[1,1]).EntireRow.Font.Bold = true;     

excel.Cells[1,1] = "col a";
excel.Cells[1,2] = "col b";
excel.Cells[1,3] = "col c";

// here loop and populate rows, nothing special just as above, all strings

excel.Visible = true;

Excel.Worksheet worksheet = (Excel.Worksheet)excel.ActiveSheet;
((Excel._Workbook)worksheet).Activate();
((Excel._Worksheet)worksheet).Activate();