1
我正在用Excel 2010和VSTO 4开发.NET 4.0(C#)中的Excel加载项。 在我的Excel存取器类中,我有一个属性“CurrentWorkbook”,它返回VSTO扩展活动工作簿:GetVstoObject失败,出现AccessViolationException
public Microsoft.Office.Tools.Excel.Workbook CurrentWorkbook
{
get
{
if (Globals.ThisAddIn.Application.ActiveWorkbook == null) return null;
return Globals.Factory.GetVstoObject(Globals.ThisAddIn.Application.ActiveWorkbook);
}
}
通常情况下,这工作正常。但也有一些情况,其中GetVstoObject
失败,并AccessViolationException
:
at Microsoft.VisualStudio.Tools.Office.Runtime.Interop.IHostItemFactoryNoMAF.CreateProvider(Object document)
at Microsoft.Office.Tools.Excel.WorkbookImpl.GetVstoObject(_Workbook workbook, IServiceProvider serviceProvider, UInt32 officeVersion)
at Microsoft.Office.Tools.Excel.ApplicationFactoryImpl.GetVstoWorkbook(_Workbook workbook)
at Microsoft.Office.Tools.Excel.ApplicationFactoryImpl.GetVstoObject(_Workbook workbook)
at TNPExcelAddIn2.ConnectionLayer.ExcelAccess.ExcelAccessor.get_CurrentWorkbook()
提示: 在错误的情况下Globals.ThisAddIn.Application.ActiveWorkbook
不null
,但在调试器,你可以看到,底层Sytem.__ComObject
有点“腐败”,因为它m_ObjectToDataMap
是null
。
- 任何猜测?
- 我该如何处理?
- 或者如何在使用
GetVstoObject
之前“测试”System.__ComObject
?
感谢的提前你的答案, 约尔格