Evite que se abra Excel al crear un file de Excel utilizando la interoperabilidad

Hola, estoy creando un Excel utilizando la interoperabilidad de Microsoft Office. Y crea files con éxito. Pero el problema es que cuando crea un file, simplemente abre excel, agrega el valor a excel y lo guarda en el nombre especificado. Cualquier tipeo accidental en ese los resultados del time llevan a una exception. Estoy creando casi 75 files con muchas filas de la database y, por lo tanto, lleva time. Durante el procesamiento no puedo realizar ninguna tarea, ya que crea una exception si está escrita en excel. ¿Hay alguna forma de ejecutar el process? en segundo plano para que la aplicación de Excel no se abra para cada creación de file.

Excel.Application oXL; Excel.Workbook oWB; Excel.Worksheet oSheet; Excel.Range oRange; // Start Excel and get Application object. oXL = new Excel.Application(); // Set some properties oXL.Visible = true; oXL.DisplayAlerts = false; // Get a new workbook. oWB = oXL.Workbooks.Add(Missing.Value); // Get the active sheet oSheet = (Excel.Worksheet)oWB.ActiveSheet; oSheet.Name = "Sales"; // Process the DataTable // BE SURE TO CHANGE THIS LINE TO USE *YOUR* DATATABLE DataTable dt = dtt; int rowCount = 1; foreach (DataRow dr in dt.Rows) { rowCount += 1; for (int i = 1; i < dt.Columns.Count + 1; i++) { // Add the header the first time through if (rowCount == 2) { oSheet.Cells[1, i] = dt.Columns[i - 1].ColumnName; } oSheet.Cells[rowCount, i] = dr[i - 1].ToString(); } } // Resize the columns //oRange = oSheet.get_Range(oSheet.Cells[1, 1], // oSheet.Cells[rowCount, dt.Columns.Count]); oRange = oSheet.Range[oSheet.Cells[1, 1], oSheet.Cells[rowCount, dt.Columns.Count]]; oRange.EntireColumn.AutoFit(); // Save the sheet and close // oSheet = null; oRange = null; oWB.SaveAs("" + username + " .xls", Excel.XlFileFormat.xlWorkbookNormal, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Excel.XlSaveAsAccessMode.xlExclusive, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); oWB.Close(Missing.Value, Missing.Value, Missing.Value); oWB = null; oXL.Quit(); // Clean up // NOTE: When in release mode, this does the trick GC.WaitForPendingFinalizers(); GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); 

Prueba esto…

// Inicie Excel y obtenga el object Aplicación. oXL = new Excel.Application { Visible = false };

  • O BIEN // Establezca algunas properties oXL.Visible = false ;

De forma pnetworkingeterminada, Excel a través de Interop se abre como Invisible.
Es su código que cambia la visibilidad de Excel. Eliminar la linea

 oXL.Visible = true; 

o establecer en falso

 oXL.Visible = false;