usando c # para seleccionar una hoja de trabajo en excel

Usando C # en .NET 3.5 con Visual Studio 2008, estoy tratando de establecer el foco (o activar) una hoja de trabajo específica en un libro abierto:

Aquí hay algunas properties:

public Excel.Application xlApp {get;set;} public Excel.Workbook xlWorkBook { get; set; } public Excel.Worksheet xlWorkSheet { get; set; } public Excel.Range range { get; set; } 

Y aquí es cómo estoy tratando de seleccionar una hoja de trabajo específica:

 (xlWorkSheet)Application.ActiveWorkbook.Sheets[FormControls.WorksheetFocus]).Select(Type.Missing); 

Y también lo he intentado de esta manera:

 ((Excel.Worksheet)this.Application.ActiveWorkbook.Sheets[1]).Select(); 

¿Qué estoy haciendo mal? ¿Cómo selecciono una spreadsheet específica en un libro de trabajo usando C #?


explicación de dónde están las definiciones:

 namespace EmailSalesVolumeSolution { class WorkBook { public string MasterFileName { get; set; } public string[] DistinctEmails { get; set; } public Excel.Application xlApp {get;set;} public Excel.Workbook xlWorkBook { get; set; } public Excel.Worksheet xlWorkSheet { get; set; } public Excel.Range range { get; set; } 

y todo está en la misma class y espacio de nombres

aquí es cómo se inicia:

 private void OpenWorkBook() { string str; int rCnt = 0; int cCnt = 0; xlApp = new Excel.ApplicationClass(); xlWorkBook = xlApp.Workbooks.Open(MasterFileName, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(FormControls.WorksheetEmails); 

Puedes usar el siguiente código:

 Worksheet sheet = (Worksheet)xlApp.Worksheets[1]; sheet.Select(Type.Missing); 

o

 sheet.Activate(); 

He usado este código y funciona bien para mí.

¿Sus properties están inicializadas?

Si lo son , probablemente deberías ser capaz de lograr lo que intentas con cualquiera de estos:

 xlApp.ActiveWorkbook.Sheets[1].Activate(); xlWorkbook.Sheets[1].Activate(); xlSheet.Activate(); 

Si no lo son , debe inicializar al less la propiedad xlApp al object de la Application que está trabajando y luego usar el código anterior. Puede inicializar los dos primeros objects usando el siguiente código.

 xlApp = new Microsoft.Office.Interop.Excel.Application(); Workbooks xlWorkbooks = xlApp.Workbooks; xlWorkbook = xlWorkbooks.Open(@"C:\filename.xlsx"); 

¡Esto es lo que hice y funciona!

 Excel.Worksheet xlWorkSheetFocus = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(2); xlWorkSheetFocus.Activate(); 

Puedes hacerlo de ambas maneras:

 Excel.Application xlApp; Excel.Worksheet xlWorksheet; 
  1. xlWorksheet = xlApp.Worksheets.get_Item(1);

  2. xlWorksheet = xlApp.Worksheets[1];