Lo primero sera crear un proyecto web y agregar un scriptmanager, un uploadpanel y dentro de el al gridview para refrescar esa parte y no toda la pagina, tambien agregamos un control FileUpload, un boton y un Label debajo. Estos 3 ultimos controles podemos ponerlos dentro de una tabla y los 2 primeros dentro del grid, personalizando al gridview para darle mayor vistocidad lucira asi:
el codigo que tendra nuestro body sera mas o menos el siguiente:
<body> <form id="form1" runat="server"> <div> <asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <asp:GridView ID="GridView1" runat="server" CellPadding="4" Font-Names="Verdana" Font-Size="Small" ForeColor="#333333"> <RowStyle BackColor="#EFF3FB" /> <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" /> <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" /> <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> <EditRowStyle BackColor="#2461BF" /> <AlternatingRowStyle BackColor="White" /> </asp:GridView> </ContentTemplate> </asp:UpdatePanel> <table> <tr> <td><asp:FileUpload ID="fupExcel" runat="server" Font-Names="Verdana" Font-Size="Small" /></td> </tr> <tr> <td><asp:Button ID="btnUpload" runat="server" Text="Upload" Font-Names="Verdana" Font-Size="Small" onclick="btnUpload_Click" /></td> </tr> <tr> <td> <asp:Label ID="Label1" runat="server"></asp:Label> </td> </tr> </table> </div> </form> </body>para nuestro codigo importamos las siguientes librerias:
using System.Data.OleDb; using System.IO;olvide decirles antes de escribir el codigo de abajo para subir el excel, creen una carpeta llamada Invoices dentro de su proyecto, en la misma ruta donde esta su web default1.aspx ya que esta carpeta es la que nos servira para crear el enlace. Una vez dicho esto escriban este codigo dentro del evento click del boton Upload.
if (fupExcel.HasFile) { try { HttpFileCollection uploads = HttpContext.Current.Request.Files; for (int i = 0; i < uploads.Count; i++) { HttpPostedFile upload = uploads[i]; if (upload.ContentLength == 0) continue; string c = System.IO.Path.GetFileName(upload.FileName); try { upload.SaveAs(Server.MapPath("Invoices\\") + c); } catch (Exception Exp) { throw (Exp); } } if (fupExcel.PostedFile != null) { HttpPostedFile attFile = fupExcel.PostedFile; int attachFileLength = attFile.ContentLength; if (attachFileLength > 0) { if (fupExcel.PostedFile.ContentLength > 0) { string Extension = Path.GetExtension(fupExcel.PostedFile.FileName); string inFileName = Path.GetFileName(fupExcel.PostedFile.FileName); string pathDataSource = Server.MapPath("Invoices\\") + inFileName; string conStr = ""; if (Extension == ".xls" || Extension == ".xlsx") { switch (Extension) { case ".xls": //Excel 1997-2003 conStr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source='" + pathDataSource.ToString() + "';" + "Extended Properties=Excel 8.0;"; break; case ".xlsx": //Excel 2007 conStr = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source='" + fupExcel.PostedFile.FileName.ToString() + "';" + "Extended Properties=Excel 8.0;"; break; default: break; } OleDbConnection connExcel = new OleDbConnection(conStr.ToString()); OleDbCommand cmdExcel = new OleDbCommand(); OleDbDataAdapter oda = new OleDbDataAdapter(); DataTable dt = new DataTable(); connExcel.Open(); DataSet ds = new DataSet(); //Selecting Values from the first sheet //Sheet name must be as Sheet1 OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM [Members$]", conStr.ToString()); da.Fill(ds); GridView1.DataSource = ds; GridView1.DataBind(); if (GridView1.Columns.Count > 0) { } connExcel.Close(); if (File.Exists(pathDataSource)) { File.Delete(pathDataSource); } } else { //Show your error in any error controls } } else { fupExcel.Focus(); GridView1.DataSource = null; GridView1.DataBind(); } } } } catch (Exception ex) { throw ex; } } else Label1.Text = "Seleccione un archivo";la variable fupexcel es el control FileUpload que les mencione en un principio. El primer if es para el caso que se presione el boton Upload sin haber seleccionado el archivo Excel. Presionen F5 y les saldra asi:
hola estyo utilizando este ejemplo pero al momneto de gargar el excel me sale un erro y me dice que el objeto Members$ no se pudo encontrar me ayudas. a que ase referencia ese objeto..........
ResponderEliminarHola Andres, cuando haces SELECT * FROM [Members$]" estas buscando la hoja de tu excel donde Members es el nombre de tu hoja donde tienes tus datos,... cual es el nombre de la tuya?
ResponderEliminara mi no me saca ningun error pero tampoco me muestra nada solo la pagina de navegacion que saca el error de Internet Explorer no puede mostrar la página web.
ResponderEliminarcomo puedo solucionar este problema..? o que es lo que esta pasando en el codigo..?
a los que les da el error del members$ reemplacen la linea del if del 2007 por
ResponderEliminarcase ".xlsx": //Excel 2007
conStr = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source='" + pathDataSource.ToString() + "';" + "Extended Properties=Excel 8.0;";
break;