2013-10-25 45 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... 
    } 
} 

希望這有助於其他人也, 約爾格

相關問題