2013-10-25 38 views
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.ActiveWorkbooknull,但在调试器,你可以看到,底层Sytem.__ComObject有点“腐败”,因为它m_ObjectToDataMapnull

  • 任何猜测?
  • 我该如何处理?
  • 或者如何在使用GetVstoObject之前“测试”System.__ComObject

感谢的提前你的答案, 约尔格

回答

2

OK,它的出现,将特定XLSX工作簿并不确定,因为有在XLSX-ZIP容器损坏的图形对象。 Excel本身忽略了这一点,但VSTO层似乎有问题。

我结束了在使用下述溶液赶上错误:

public Microsoft.Office.Tools.Excel.Workbook CurrentWorkbook 
{ 
    get 
    { 
    return GetVSTOWorkbookByInteropWorkbook(Globals.ThisAddIn.Application.ActiveWorkbook); 
    } 
} 

[HandleProcessCorruptedStateExceptions] 
public static ExcelVSTO.Workbook GetVSTOWorkbookByInteropWorkbook(ExcelInterop.Workbook workbook) 
{ 
    if (workbook == null) return null; 

    try 
    { 
     return Globals.Factory.GetVstoObject(workbook); 
    } 
    //This also catches unhandled "AccessViolationException" in the VSTO layer because 
    //we have decorated the method by the annotation [HandleProcessCorruptedStateExceptions]. 
    catch (AccessViolationException ex) 
    { 
     //Handle exception... 
    } 
} 

希望这有助于其他人也, 约尔格

相关问题