2012-04-23 14 views
6

Estoy intentando abrir un libro de Excel guardado mientras mantengo una referencia al libro actual. El problema es que tan pronto como abro el libro de trabajo guardado, el original arroja una excepción al acceder.Al abrir un libro guardado, el libro actual arroja excepciones

Aquí hay un fragmento de código para demostrar. Puse esto en un controlador de eventos para un botón de cinta para probarlo.

try 
{ 
    string workbookPath = @"C:\Temp\Test.xlsx"; 
    Workbook current = Globals.ThisAddIn.Application.ActiveWorkbook; 
    Workbook newWorkbook = Globals.ThisAddIn.Application.Workbooks.Open(workbookPath); 

    current.Activate();     // throws an exception 
    Sheets sheets = current.Worksheets; // throws an exception 
    string name = current.Name;   // throws an exception 
} 
catch (Exception ex) {} 

Si se depura y poner los relojes en current, sheets y name las variables se puede ver que en cuanto newWorkbook se instancia, las otras variables producen excepciones cuando se tiene acceso.

La excepción que se lanza es

System.Runtime.InteropServices.COMException was caught 
    Message=Exception from HRESULT: 0x800401A8 
    Source=WorkbookTest 
    ErrorCode=-2147221080 
    StackTrace: 
     at Microsoft.Office.Interop.Excel._Workbook.Activate() 
     at WorkbookTest.Ribbon1.button1_Click(Object sender, RibbonControlEventArgs e) in C:\Temp\WorkbookTest\WorkbookTest\Ribbon1.cs:line 25 
    InnerException: 

Lo más extraño es que este única sucede en una instancia nueva de Excel. Si abro Excel, cierro el primer libro y abro uno nuevo, funciona bien. Es solo si tengo una instancia de Excel recién abierta que esto falla. Realmente no entiendo por qué es eso.

¿Alguien sabe cómo solucionar esto? ¿Estoy haciendo algo mal aquí?

+0

¿Qué está configurado actualmente después de configurarlo en ActiveWorkbook? –

+0

@DougGlancy No estoy seguro de lo que quieres decir. Está establecido en el libro de trabajo activo. "Book1" por defecto. Es un objeto Libro de trabajo. –

+0

Eso es lo que quise decir. A veces, el complemento es el libro activo justo cuando comienza, aunque no pensé que fuera así, ya que llamabas desde un botón. Vale la pena intentarlo. –

Respuesta

6

Creo que este podría ser el comportamiento correcto.

Si inició manualmente una nueva sesión de Excel (que crea automáticamente un nuevo libro de trabajo [Libro1]) y luego, sin hacer nada para Book1, abre un libro existente, notará que Book1 ya no existe en el Excel sesión.

Supongo que está experimentando el mismo comportamiento a través de su complemento C#.

2

Este es el comportamiento correcto según lo descrito por 'creamyegg'

Excel descartará el libro de trabajo temporal si no se utiliza. Para evitar este problema, solo necesita usar la hoja antes de abrir otra.

¡Busque una celda vacía y modifíquela! Su libro de trabajo se mantendrá y podrá dedicarse a su negocio. :)