我正在开发一个相当全面的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
以及我在Object
中使用For Each
和CType到Excel时都不会发生错误。范围。在后一种情况下,我在Range中获取了一个Object,但是Excel.Range的CType失败了。有没有办法在这一点上检查对象?
我真的不知道为什么加载项失败了一次而另一个加载完成没有错误,即使没有重新加载Excel(或任何其他参与的DLL)。
非常感谢任何帮助!
PS:VS2010,.Net 3.5SP1,Excel 2007,Imports Excel = Microsoft.Office.Interop.Excel
答案 0 :(得分:0)
马丁,我不是专家,但你确定你需要经常使用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
答案 1 :(得分:0)
这似乎是一个众所周知的问题,据我所知,微软的官方回应是“升级到更新版本的.NET”。
请参阅MSDN论坛上的this主题,最后以Tom Xu [MSFT]声明:
此问题似乎已在Visual Studio 2010中得到修复。我认为它可以解决FerchoArg的问题。