Как в Excel VSTO проверить, принадлежит ли рабочий лист закрытой книге?

Если у меня есть ссылка на Worksheetи я закрываю ее родительскую Workbook, ссылка не исчезает. Но я не могу понять, как мне проверить, что этих листов не существует. Проверка nullне работает.

Пример:

Workbook book = Globals.ThisAddIn.Application.ActiveWorkbook;
Worksheet sheet = (Worksheet)book.Worksheets[1]; // Get first worksheet
book.Close(); // Close the workbook
bool isNull = sheet == null; // false, worksheet is not null
string name = sheet.Name; // throws a COM Exception

Это исключение, которое я получаю, когда пытаюсь получить доступ к листу:

System.Runtime.InteropServices.COMException was caught
  HResult=-2147221080
  Message=Exception from HRESULT: 0x800401A8
  Source=MyProject
  ErrorCode=-2147221080
  StackTrace:
       at Microsoft.Office.Interop.Excel._Worksheet.get_Name()
       at MyCode.test_Click(Object sender, RibbonControlEventArgs e) in c:\MyCode.cs:line 413
  InnerException: 

Это даже не было бы проблемой, если бы я мог проверить событие удаления рабочей книги, но Excel не предоставляет его (что действительнораздражает).

Есть ли какой-нибудь удобный способ убедиться, что я не использую эти рабочие листы?

5
задан Kris Harper 6 March 2012 в 20:20
поделиться