【发布时间】:2013-10-25 13:25:26
【问题描述】:
我正在使用 Excel 2010 和 VSTO 4 在 .NET 4.0 (C#) 中开发 Excel 加载项。 在我的 Excel 访问器类中,我有一个属性“CurrentWorkbook”,它返回 VSTO 扩展的活动工作簿:
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?
提前感谢您的回答, 约尔格
【问题讨论】: