Excel互操作中奇怪的偶发InvalidCastException

我正在开发一个相当全面的Excel加载项,应用了很多操作。 拿一个工作簿,以新名称保存,应用操作(添加名称,更改公式等)。

一般来说,它工作正常,但不时.net几乎任何我的CType抛出一个InvalidCastException。 当我确认错误并在完全相同的Excel工作簿上再次运行代码(不退出Excel)时,不会发生错误。 发生InvalidCastException的可能是所有尝试中的40%,否则加载成功。

最近,我不得不从C#转换到VB.Net。 我一直使用CType,比如Dim interior = CType(cl.Interior, Excel.Interior) (其中一个失败语句)。 该错误不会发生在同一地方,但在我的程序,也转换范围时,也For Each r As Excel.Range In largerRange以及当我使用ObjectFor Each和CType到Excel.Range。 在后一种情况下,我获取范围内的对象,但CType到Excel.Range失败。 那么有什么方法可以在这个时候检查对象呢?

我真的不知道为什么外接程序一次失败,另一个完成没有错误,即使没有重新加载Excel(或任何其他参与的DLL)。

任何帮助将不胜感激!

PS:VS2010,.Net 3.5SP1,Excel 2007,Imports Excel = Microsoft.Office.Interop.Excel

马丁,我不是专家,但你确定你需要经常使用CType吗? 例如,下面是一个简单的VSTO插件,它可以在不投射的情况下操作您提到的一些对象。 它针对Excel 2010和.Net 4。

  Public Class ThisAddIn Private Sub ThisAddIn_Startup() Handles Me.Startup test() End Sub End Class Module Module1 Sub test() Dim appExcel As Excel.Application Dim wb As Excel.Workbook Dim ws As Excel.Worksheet Dim intr As Excel.Interior appExcel = Globals.ThisAddIn.Application With appExcel .Visible = True appExcel.ActiveWorkbook.Close(SaveChanges:=False) wb = appExcel.Workbooks.Add ws = wb.Worksheets(1) For Each cell As Excel.Range In ws.Range("A1:B2") intr = cell.Interior intr.ColorIndex = cell.Row + cell.Column Next End With End Sub End Module 

这似乎是一个已知的问题,据我所知,微软官方的回应是“升级到更新版本的.NET”。

在MSDN论坛上看到这个主题,以Tom Xu [MSFT]结尾:

这个问题似乎已经在Visual Studio 2010中得到了解决。我认为这可以成为FerchoArg问题的答案。