none
Problemas en webpart para cargar excel en sharepoint meidante un HtmlInputFile ! RRS feed

  • Pregunta

  • Hola foreros,

    Tengo la siguiente situación, desarrolle una webpart para cargar
    el contenido de un libro de Excel y luego copiarlo en una lista de MOSS.
    Todo funciona bien localmente, pero cuando trato de cargar los archivos de una ubicación de la red no me funciona, me sale "error inesperado"... pasa lo mismo cuando intento probar desde otra pc a través de la red .. el componente que utilice para cargar los archivos es el HtmlInputFile .. he pensado que pueda ser alguna propiedad de este control que no este configurada y por eso me da ese error .. si alguien sabe por favor espero sus sugerencias ..

    Gracias.

    Chriss ..
    Christina Torres
    viernes, 18 de noviembre de 2011 21:27

Todas las respuestas

  • Hola Christina,

    posiblemente tu problema sea de permisos. Cuando cargas un fichero en ASP.NET, el proceso de carga se realiza en el servidor con la cuenta del Application Pool, en tu caso, con la cuenta de servicio de SharePoint.

    Comprueba que esa cuenta tiene permisos en la carpeta.

     


    Alberto Diaz Martin twitter://@adiazcan | http://geeks.ms/blogs/adiazmartin | MVP SharePoint Server
    sábado, 19 de noviembre de 2011 8:30
  • Hola,

    ¿Has probado con el control ASP.NET FileUpload? Yo lo he usado en alguna ocasión en WebParts de SharePoint para cargar archivos y siempre ha funcionado bien.

    Saludos


    ------------------------------------------------------------
    Juan Carlos González Martín MVP de SharePoint Server
    Director revista CompartiMOSS: http://www.gavd.net/servers/compartimoss/compartimoss_main.aspx
    Blog: http://geeks.ms/blogs/ciin
    Twitter: @jcgm1978
    ------------------------------------------------------------
    sábado, 19 de noviembre de 2011 8:37
  • Hola Alberto y Juan Carlos: Les comento que revise lo que me dice Alberto y sí, mi cuenta de servicio de SharePoint tiene permisos para acceder a la carpeta .. por otro lado cambie el componente por el que me remcomendo Juan Carlos, es decir el fileupload y me funciona, le doy buscar archivos en la red desde mi pc y los sube a la perfección, pero cuando un usuario trata de hacerlo desde su pc da un error inesperado ... tienes alguna sugerencia Juan Carlos .. será alguna propiedad que no he configurado .. Me podrías pasar algún ejemplo de los que has realizado ..? Muchas gracias Chriss.
    Christina Torres
    lunes, 21 de noviembre de 2011 15:29
  • Hola,

    Te paso un ejemplo:

    • En primer lugar, con un botón compruebas que hay un archivo listo para cargar (no te preocupes por el método ValidarArchivoExcel):
            protected void btnProcesar_Click(object sender, EventArgs e)
            {
                try
                {
                    //Primero validamos el archivo Excel
                    bool bArchivoExcelOK = false;
                    //Nombre del archivo
                    string sRutaArchivo =fuSubirArchivo.PostedFile.FileName;
    
                    //Realizamos la validación del archivo Excel
                    bArchivoExcelOK = ValidarArchivoExcel(sRutaArchivo);
    
                    //Si el archivo es válido, lo cargamos en la biblioteca de documentos especificada
                    if (bArchivoExcelOK)
                    {
                        this.lblMensajeProcesado.Text =
                            "Archivo excel válido.";
                        CargarArchivoExcel(sRutaArchivo);
                    }
                    else
                    {
                        this.lblMensajeProcesado.Text =
                            "El archivo excel no es correcto. ";
                    }
                }
                catch (Exception ex)
                {
                    this.lblError.Text =
                        "Se ha producido el siguiente error: " +
                        ex.Message;
                }
            }
    
    • Para realizar la carga en la biblioteca de documentos:
            void CargarArchivoExcel(string sRutaArchivo)
            {
                using (SPSite spsSitio = new SPSite(SPContext.Current.Web.Url))
                {
                    using (SPWeb spwWeb = spsSitio.OpenWeb())
                    {
                        if (this.fuSubirArchivo.HasFile)
                        {
                            //Biblioteca de documentos de carga (configurada en la WebPart
                            SPFolder spfDocLibrary = spwWeb.Folders[sDocumentLibraryName];
    
                            // Preparación para cargar el archivo
                            bool bReemplazarArchivosExistentes = true;
                            //Nombre del archivo
                            string sNombreArchivo = Path.GetFileName(sRutaArchivo);
                            //Stream que contiene el archivo a cargar
                            FileStream fsStream = File.OpenRead(sRutaArchivo);
    
                            // Subimos el documento
                            SPFile spfile = 
                                spfDocLibrary.Files.Add(sNombreArchivo, fsStream, bReemplazarArchivosExistentes);
    
                            // Guardamos los cambios
                            spfDocLibrary.Update();
    
                            //Mostramos el correspondiente mensaje al usuario.
                            this.lblMensajeProcesado.Text += 
                                " Archivo cargado correctamente en la biblioteca " +
                                spfDocLibrary.Name.ToString() + " .";
    
                        }
                        else
                        {
                            this.lblError.Text =
                                 "Se ha producido el siguiente error: " +
                                 "Archivo no encontrado.";
                        }
    
                    }
                }
            }
    
    

    Un saludo


    ------------------------------------------------------------
    Juan Carlos González Martín MVP de SharePoint Server
    Director revista CompartiMOSS: http://www.gavd.net/servers/compartimoss/compartimoss_main.aspx
    Blog: http://geeks.ms/blogs/ciin
    Twitter: @jcgm1978
    ------------------------------------------------------------
    lunes, 21 de noviembre de 2011 21:02
  • Hola Juan Carlos,

    Estuve fuera por eso no conteste .. el problema que estoy teniendo ahora es que mi salta el error que el path no es correcto, el problema sucede cuando intento leer archivo de la red ... aquí te paso mi codigo, echale un vistazo y si tienes idea de como poner el path correcto me dices ...

     private void leer_excel (){

                /*conexion al excel*/

                if (file.HasFile)    // file es de tipo FileUlpolad
                {

                string ruta = file.PostedFile.FileName;

    // he intendo poner el path de este modo para probar pero no me dice path incorrecto server014\\Documentos\UBto\CDC\Informatica\1.Conoro.xls"
                   
    string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='"+ruta+"';Extended Properties=Excel 8.0;";

    DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.OleDb");

    DbDataAdapter adapter = factory.CreateDataAdapter();

    DbCommand selectCommand = factory.CreateCommand();

    selectCommand.CommandText = "SELECT * FROM [Consumo$]";

    DbConnection connection = factory.CreateConnection();

    connection.ConnectionString = connectionString;

    selectCommand.Connection = connection;

    adapter.SelectCommand = selectCommand;

    System.Data.DataTable tabla= new System.Data.DataTable();

    adapter.Fill(tabla);

        
    //SharePoint - llenar la lista

    SPSite miSitio = new SPSite(SPContext.Current.Site.ID);

    SPWeb miWeb = miSitio.OpenWeb(SPContext.Current.Web.ID);

    SPList miLista = miWeb.Lists["Test"];

    //Lee tabla y agrega

     Delete_Items();

     foreach (DataRow miDataRoW in tabla.Rows)
     {
                        miListaItem = miLista.Items.Add();
                        miListaItem["Indicador"] = miDataRoW[0];
                        miListaItem["Cons.Plan"] = miDataRoW[1];
                        miListaItem.Update();

                    }

               } else {

    Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "clave", "alert('Error! No se ha seleccionado ningun archivo !');", true);
           
               
                }

     

    Saludos

    Chriss

     


    Christina Torres
    miércoles, 23 de noviembre de 2011 15:15