Foros del Web » Programación para mayores de 30 ;) » .NET »

Error : Excepción de HRESULT: 0x800A03EC

Estas en el tema de Error : Excepción de HRESULT: 0x800A03EC en el foro de .NET en Foros del Web. Hola foro. tengo el siguiente problema, a ver si alguien tiene alguna idea del porque y como solucionarlo, Tengo una aplicacion basada en winform que ...
  #1 (permalink)  
Antiguo 26/02/2010, 15:13
Avatar de Porlachucha  
Fecha de Ingreso: noviembre-2008
Ubicación: Santiago
Mensajes: 172
Antigüedad: 15 años, 6 meses
Puntos: 5
Error : Excepción de HRESULT: 0x800A03EC

Hola foro. tengo el siguiente problema, a ver si alguien tiene alguna idea del porque y como solucionarlo,

Tengo una aplicacion basada en winform que esta compilada con VS2008 C# y en un sistema operativo de 64 bits (W7).
la aplicacion intenta abrir desde una ubicacion un archivo en excel, para lo cual utiliza interop, el cual esta referenciado en la aplicacion.
al seleccionar un archivo, la aplicacion hace un open del libro (pasado como variable), y recorre la coleccion Worksheets obteniendo el nombre de la hoja y copiandolo en un datatable, el cual se retorna para que el usuario elija la hoca del libro con la cual quiere trabajar (en caso que exista mas de una)
posteriormente con el nombre del archivo y el nombre de la hoja, se ejecuta nuevamente la funcion de apertura, esta vez para leer lod datos del libro/hoja especificados, y traspasarlos a un datatable, el cual es devuelto para el procesamiento de dichos datos

el problema es, que la aplicacion funciona en la maquina donde compilo la aplicacion, pero cuando copio esta aplicacion al servidor de produccion (donde la accesaran varios usuarios) me arroja el siguiente error:

Excepción de HRESULT: 0x800A03EC

He visto en otros foros, que mencionan un problema de acceso al archivo (aunque siempre hacen referencia a aplicaciones del tipo web), por lo que intente abrir un archivo que reside en el mismo server, incluso en el mismo directorio donde se ejecuta la aplicacion, pero aun asi, me sigue marcando el error.

este es el codigo de la aplicacion, la cual sigue una serie de recomendaciones para trabajar con este tipo de tecnologias. aca lo dejo por si alguien lo quiere utilizar

Código:
        private DataTable _dttObtieneHojasLibro(string _sPath)
        {
            try
            {
                DataTable dttHojas = new DataTable();
                dttHojas.Columns.Add("hojas", Type.GetType("System.String"));
                dttHojas.Columns.Add("total_filas", Type.GetType("System.Int32"));

                System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); 

                #region Open WorkBook Method Parameters

                int iTime = 50;
                Microsoft.Office.Interop.Excel.Application oApp = new Microsoft.Office.Interop.Excel.Application();
                Microsoft.Office.Interop.Excel.Workbooks oBooks = oApp.Workbooks;
                Microsoft.Office.Interop.Excel.Workbook oBook = oBooks.Add(Type.Missing);

                #region Open WorkBook Method Parameters
                oBook = oApp.Workbooks.Open(_sPath,             //Source File Name
                                          0,                    //UpdateLinks
                                          false,                //ReadOnly
                                          5,                    //Format
                                          "",                   //Password
                                          "",                   //WriteResPassword
                                          true,                 //IgnoreReadOnly
                                          Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, //Origin
                                          "\t",                 //Delimiter
                                          false,                //Editable
                                          false,                //Notify
                                          0,                    //Converter
                                          false,                //AddToMru
                                          null,                 //Load
                                          null);                //CorruptLoad

                #endregion

                #endregion

                #region Procesa Hojas Libro
                for (int i = 1; i < oBook.Worksheets.Count + 1; i++)
                {
                    Microsoft.Office.Interop.Excel.Worksheet sheet = new Microsoft.Office.Interop.Excel.Worksheet();
                    sheet = (Microsoft.Office.Interop.Excel.Worksheet)oBook.Worksheets.get_Item(i);
                    if (sheet != null && sheet.Name.Length > 0)
                    {

                        dttHojas.Rows.Add(sheet.Name.Trim(), sheet.Rows.Count);
                    }
                }
                #endregion


                #region Close WorkBook Method Parameters
                //NAR(hoja, iTime);
                oBook.Close(false, Type.Missing, Type.Missing);
                NAR(oBook, iTime);
                NAR(oBooks, iTime);
                oApp.Quit();
                NAR(oApp, iTime);

                if (!bKillExcellProcess(iTime))
                {
                    return null;
                }
                #endregion

                System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("es-CL"); 


                if (dttHojas.Rows.Count > 0)
                {
                    return dttHojas;
                }
                else
                {
                    return null;
                }

            }
            catch (Exception ex)
            {

                return null;
            }
        }
Código:
        private DataSet _dttXlsToDts(string _sPath, string _sHoja, System.Data.DataTable _dttFormato, string _sPassword)
        {
            #region Seteo de password
            string sPassword = null;
            if (_sPassword == null || _sPassword.Length == 0)
            {
                sPassword = "";
            }
            else
            {
                sPassword = _sPassword;
            }
            #endregion

            #region Setea el nombre del Dataset
            dtsDataSource = new DataSet(_sPath.Substring(_sPath.LastIndexOf("\\") + 1));
            #endregion



            #region Open WorkBook Method Parameters

            int iTime = 50;
            Microsoft.Office.Interop.Excel.Application oApp = new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel.Workbooks oBooks = oApp.Workbooks;
            Microsoft.Office.Interop.Excel.Workbook oBook = oBooks.Add(Type.Missing);

            #region Open WorkBook Method Parameters
            oBook = oApp.Workbooks.Open(_sPath,             //Source File Name
                                      0,                    //UpdateLinks
                                      false,                //ReadOnly
                                      5,                    //Format
                                      "",                   //Password
                                      "",                   //WriteResPassword
                                      true,                 //IgnoreReadOnly
                                      Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, //Origin
                                      "\t",                 //Delimiter
                                      false,                //Editable
                                      false,                //Notify
                                      0,                    //Converter
                                      false,                //AddToMru
                                      null,                 //Load
                                      null);                //CorruptLoad

            #endregion

            #endregion

            #region transform to datatable from Excel

            for (int i = 1; i < oBook.Worksheets.Count + 1; i++)
            {
                Microsoft.Office.Interop.Excel.Worksheet sheet = new Microsoft.Office.Interop.Excel.Worksheet();
                sheet = (Microsoft.Office.Interop.Excel.Worksheet)oBook.Worksheets.get_Item(i);
                if (sheet.Name.ToString().Trim().ToUpper() == _sHoja.Trim().ToUpper())
                {


                    System.Data.DataTable dttAux = new System.Data.DataTable();
                    dttAux = loadDataTable((Microsoft.Office.Interop.Excel.Worksheet)oBook.Worksheets.get_Item(i));
                    if (dttAux == null || dttAux.Rows.Count == 0)
                    {
                        continue;
                    }

                    // revisa si existe el datatable con el formato
                    if (_dttFormato != null && _dttFormato.Rows.Count > 0)
                    {
                        if (bFormatoOK(_dttFormato, dttAux))
                        {
                            dtsDataSource.Tables.Add(dttAux);
                        }
                    }
                }
            }
            #endregion

            #region Close WorkBook Method Parameters
            //NAR(hoja, iTime);
            oBook.Close(false, Type.Missing, Type.Missing);
            NAR(oBook, iTime);
            NAR(oBooks, iTime);
            oApp.Quit();
            NAR(oApp, iTime);

            if (!bKillExcellProcess(iTime))
            {
                return null;
            }
            #endregion


            #region devuelve resultados por propertys y por parametros
            dtsDatos = dtsDataSource;
            return dtsDataSource;
            #endregion
        }
La verdad de las cosas, es que ya he gastado demasiado tiempo y neuronas en este tema, y ya estoy pensando en optar por una libreria de pago, que me permita manejar archivos en excel, ya que incluso estuve un tiempo usando ADO, pero este no tiene soporte para 64 bits.

Saludos y gracias por vuestro tiempo
Plch

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:50.