viernes, 27 de julio de 2012

Workbook.Worksheets.Delete y la madre que parió a la alerta de borrado

Estoy trabajando en un AddIn para Excel, utilizando las famosas VSTO (Interop) de Offcie desde Visual Studio 2012.

Pulsando en un botón del Ribbon, que hemos definido, debía localizar una hoja del libro específica y borrarla. el problema es que por defecto esta acción Delete(), lanza un ventana de dialogo que te pide una confirmación  de si quieres borrar esa hoja.

El problema viene de que cuando pulso cancelar, no he encontrado la forma de capturar cual de los botones ha pulsado antes de que realice el borrado… y tres métodos más allá rompía la aplicación por no encontrar una hoja que se suponía que aún existía.

Googleando me he encontrado con una solución bruta y basta, pero que me ha valido. Y no es más que deshabilitar las ventanas de alerta y que borre de forma directa.

   1: /// <summary>
   2:         /// Dado el nombre de la hoja Excel, la busca y la borra
   3:         /// </summary>
   4:         /// <param name="name"></param>
   5:         /// <returns></returns>
   6:         private bool borraHoja(string name)
   7:         {
   8:  
   9:             Boolean seHaBorradoLaHojaExcel = false;
  10:  
  11:             var addInExcel = Globals.ThisAddIn.Application;
  12:             addInExcel.DisplayAlerts = false;
  13:             Worksheet HojaASerBorrada = (from Worksheet hojaExcel in addInExcel.ActiveWorkbook.Worksheets
  14:                                          where hojaExcel.Name == name
  15:                                          select hojaExcel).FirstOrDefault();
  16:  
  17:             if (HojaASerBorrada != null)
  18:             {
  19:                 HojaASerBorrada.Delete();
  20:                 seHaBorradoLaHojaExcel = true;
  21:             }
  22:  
  23:             addInExcel.DisplayAlerts = true;
  24:             return seHaBorradoLaHojaExcel;
  25:         }

 



En mi caso me ha valido porque es el comportamiento esperado, pero creo que merece un estudio en más profundidad para ver como capturar el botón que ha pulsado el usuario.


Que os sea de utilidad

No hay comentarios: