Si tengo una referencia a Worksheet
y cierro es el padre Workbook
, la referencia no desaparece. Pero no puedo entender cómo debo verificar para asegurarme de que estas hojas no existan. La comprobación de null
no funciona.En Excel VSTO, ¿cómo puedo verificar si una hoja de trabajo pertenece a un libro cerrado?
Ejemplo:
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
Ésta es la excepción que consigo cuando intento acceder a la ficha técnica:
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:
Esto ni siquiera sería un problema si podía comprobar si hay un libro de eliminar evento, pero Excel no proporciona uno (que es realmente molesto).
¿Hay alguna manera conveniente de asegurarme de no utilizar estas hojas de trabajo?
Esto funciona, pero solo si tengo el 'Libro de trabajo' en ese momento. Mi código de ejemplo fue simple, pero en la práctica, tengo varios métodos que solo toman un objeto 'Hoja de trabajo'. Sin embargo, voy a aceptar tu respuesta ya que terminé haciendo algo similar. A saber, revisé 'Application.Workbooks.Count> 0'. Como solo me encontré con este problema cuando no había libros abiertos, este cheque fue suficiente para mis necesidades. Gracias por tu aporte. –