none
Como cerrar un archivo Excel usando SpreadsheetLightl RRS feed

  • Pregunta

  • Hola 

    Trabajo en una app Windows Forms en la cual tengo un archivo diseñado de Excel en Bin/Debug/Excel/SolicitudCotizacion.xlsx

    Por código pueblo de datos el archivo excel, cierro el archivo con un bloque Using.

    if (empresa != null && sCotizacion != null)
                {
                    //Comunicarme con el Excel y ponerle los datos
                    //Empresa y proveedor
                    using (SLDocument sl = new SLDocument(Path.Combine(Application.StartupPath, @"Excel\SolicitudCotizacion.xlsx")))
                    {
                        if (sl.SelectWorksheet("Solicitud de Cotización"))
                        {
                            sl.SetCellValue("J1", empresa.Ruc);
                            sl.SetCellValue("C2", empresa.RazonSocial);
                            sl.SetCellValue("C3", empresa.Direccion);
                            sl.SetCellValue("C4", empresa.TelefonoFijo);
                            sl.SetCellValue("F4", empresa.TelefonoCelular);
                            sl.SetCellValue("C5", empresa.Email);
                            sl.SetCellValue("J5", sCotizacion.NumeroCotizacion);
                            sl.SetCellValue("J7", sCotizacion.Proveedor.Numero);
                            sl.SetCellValue("C7", sCotizacion.Proveedor.RazonSocial);
                            sl.SetCellValue("C8", sCotizacion.Proveedor.Direccion);
                            sl.SetCellValue("C9", sCotizacion.FechaEmision);
                            sl.SetCellValue("F9", sCotizacion.FechaEntrega);
                        }
                        sl.Save();
                    }
    
                    if (rutaPdf == null && rutaExcel == null) return;
    
                    _listaArchivos = new List<string>(new string[] { rutaPdf, rutaExcel });
                    Utilidades.EnviarMail(empresa.Email, sCotizacion.Proveedor.EmailProveedor, "Solicitud de Cotización",
                        "", empresa.ClaveEmail, _listaArchivos, false);
                    _listaArchivos.Clear();
                }

    Antes de enviar el email adjunto dos archivos al correo, se puede enviar con normalidad al primer destinatario pero cuando regresa para escribir el excel por segunda vez me muestra un mensaje de error que dice lo siquiente: 

    El proceso no puede obtener acceso al archivo 'C:\D\TecSoftwareFacturacionEcuador\TecSoftwareFacturacionEcuador\TecSoftware.WindowsForms\bin\Debug\Excel\SolicitudCotizacion.xlsx' porque está siendo utilizado en otro proceso.

    ¿Puede ser que demora en enviar el email?. Cuando viene a escribir de nuevo en el archivo excel es que me lanza el error lo vi depurando.

    ¿De que manera puedo solucionarlo?

    Saludos!!!


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú



    miércoles, 1 de abril de 2020 14:28

Respuestas

Todas las respuestas

  • Hola Pedro Ávila, 

      

    Gracias por levantar tu consulta en los foros de MSDN. Entendimos su pregunta y vamos a darle seguimiento para buscar la mejor repuesta pertinente al caso. 

      

    Cualquier duda referente a productos Microsoft, puedes consultarnos. Es un gusto informarte. 

    Gracias por usar los foros de MSDN. 

      

      

    Oystein Edwards 

     ____________________________ 

      

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. 

    jueves, 2 de abril de 2020 16:38
    Moderador
  • Buenas:

    Ver vídeo.

    Saludos.


    http://electronica-pic.blogspot.com

    viernes, 3 de abril de 2020 0:53
  • Hola,

    Si piensas que puede ser por velocidad de ejecución ¿Has probado a poner un punto de interrupción al final del método?

    De esta manera puedes ejecutar el programa, se parará en el punto de interrupción esperas unos segundos o minutos y continuas. Si no te falla, entonces buscas la solución, de la más sencilla y menos elegante como puede ser un tiempo de espera a una más elegante que sería intentar controlar cuando se termina de mandar el correo.

    Otra solución podría ser cerrar el fichero en vez de confiar que se cierra al salir del using.


    Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcándola como útil.
    Blog

    viernes, 3 de abril de 2020 8:09
  • Hola Rodripelto

    Voy a probar en poner un timer por que creo que la velocidad en que envia el correo es rápido y el espera todavía que le respondan que esta hecho el envio y creo es ahí cuando va escribir de nuevo en el excel es que sale el error voy a probar y comento.

    Saludos!


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    miércoles, 8 de abril de 2020 14:56
  • hola

    >>pero cuando regresa para escribir el excel por segunda vez me muestra un mensaje de error que dice lo siquiente:

    Eso se debe a que el attach del mail esta tomando el archivo

    debes usar un using con las librerias de mail, o sea SmtpClient y MailMessage, asi lo libera luego de enviar el mail

    O sino ver

    MailMessage–Adjuntar Archivo sin bloquearlo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Pedro Ávila miércoles, 8 de abril de 2020 17:40
    miércoles, 8 de abril de 2020 15:16
  • Hola Leandro

    Hice lo primero que me indicaste usando Using para SmtpClient y MailMessage y seguía dando el mismo error, después use la implementación que esta en tu articulo que me compartiste y funciono.

    Gracias.


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    miércoles, 8 de abril de 2020 17:40