Saltar al contenido

Cerrar el proceso de aplicación de Excel en C # después del acceso a los datos

Solución:

Prueba esto:

excelBook.Close(0); 
excelApp.Quit();

Al cerrar el libro de trabajo, tiene tres parámetros opcionales:

Workbook.close SaveChanges, filename, routeworkbook 

Workbook.Close(false) o si está haciendo un enlace tardío, a veces es más fácil usar cero
Workbook.Close(0)
Así es como lo he hecho al automatizar el cierre de libros de trabajo.

También fui y busqué la documentación, y la encontré aquí: Libro de Excel Cerrar

Gracias,

xlBook.Save();
xlBook.Close(true);
xlApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);

prueba esto … funcionó para mí … deberías liberar ese objeto de aplicación xl para detener el proceso.

Ref: https://stackoverflow.com/a/17367570/132599

Evite el uso de expresiones de llamada de doble punto, como esta:

var workbook = excel.Workbooks.Open(/*params*/)

… porque de esta manera crea objetos RCW no solo para el libro de trabajo, sino para los libros de trabajo, y debe liberarlo también (lo cual no es posible si no se mantiene una referencia al objeto).

Esto me resolvió el problema. Tu código se convierte en:

public Excel.Application excelApp = new Excel.Application();
public Excel.Workbooks workbooks;
public Excel.Workbook excelBook;
workbooks = excelApp.Workbooks;
excelBook = workbooks.Add(@"C:/pape.xltx");

...

Excel.Sheets sheets = excelBook.Worksheets;
Excel.Worksheet excelSheet = (Worksheet)(sheets[1]);
excelSheet.DisplayRightToLeft = true;
Range rng;
rng = excelSheet.get_Range("C2");
rng.Value2 = txtName.Text;

Y luego suelta todos esos objetos:

System.Runtime.InteropServices.Marshal.ReleaseComObject(rng);
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelSheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(sheets);
excelBook .Save();
excelBook .Close(true);
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(workbooks);
excelApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);

Envuelvo esto en un try {} finally {} para garantizar que todo se libere incluso si algo sale mal (¿qué podría salir mal?)

public Excel.Application excelApp = null;
public Excel.Workbooks workbooks = null;
...
try
{
    excelApp = new Excel.Application();
    workbooks = excelApp.Workbooks;
    ...
}
finally
{
    ...
    if (workbooks != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(workbooks);
    excelApp.Quit();
    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *