Cómo exportar datos en dataGrid en asp . Net WebForm a Microsoft Excel

Resumen

Use esta guía paso a paso para rellenar un control de servidor web de DataGrid en un ASP.NET WebForm y, a continuación, exportar el contenido de DataGrid a Microsoft Excel.

Técnicas

En este artículo se describen dos técnicas para exportar los datos en DataGrid:

  • Uso del tipo MIME de Excel (o tipo de contenido)

    Con el código del lado servidor, puede enlazar DataGrid a los datos y hacer que los datos se abran en Excel en un equipo cliente. Para ello, establezca ContentType en application/vnd.ms-excel. Una vez que el cliente recibe la nueva secuencia, los datos aparecen en Excel como si el contenido se abriera como una nueva página en el explorador web.

  • Uso de Excel Automation

    Con el código del lado cliente, puede extraer el CÓDIGO HTML de DataGrid y, a continuación, automatizar Excel para mostrar el HTML en un nuevo libro. Con Excel Automation, los datos siempre aparecen fuera del explorador en una ventana de aplicación de Excel. Una ventaja de Automation es que puede controlar Excel mediante programación si desea modificar el libro después de exportar los datos. Sin embargo, dado que Excel no está marcado como seguro para el scripting, los clientes deben aplicar la configuración de seguridad en el explorador web que permite Automation.

Paso a paso

  1. Inicie Visual Studio .NET. En el menú Archivo, elija Nuevo y, a continuación, haga clic en Proyecto.

  2. En el panel Tipos de proyecto, haga clic en Proyectos de Visual Basic. En Plantillas, haga clic en ASP.NET aplicación web. Asigne a la aplicación el nombre ExcelExport y, a continuación, haga clic en Aceptar.

    WebForm1 aparece en la vista Diseño.

  3. En Explorador de soluciones, haga clic con el botón derecho en WebForm1.aspx y, a continuación, haga clic en Cambiar nombre. Cambie el nombre del archivo a Bottom.aspx.

  4. En el menú Ver, haga clic en Origen HTML para agregar el siguiente elemento DataGrid entre el

    y
    Etiquetas:

    <asp:datagrid id="DataGrid1" runat="server" GridLines="Vertical" CellPadding="3" BackColor="White"
    BorderColor="#999999" BorderWidth="1px" BorderStyle="None" Width="100%" Height="100%" Font-Size="X-Small"
    Font-Names="Verdana">
    <SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#008A8C"></SelectedItemStyle>
    <AlternatingItemStyle BackColor="Gainsboro"></AlternatingItemStyle>
    <ItemStyle BorderWidth="2px" ForeColor="Black" BorderStyle="Solid" BorderColor="Black" BackColor="#EEEEEE"></ItemStyle>
    <HeaderStyle Font-Bold="True" HorizontalAlign="Center" BorderWidth="2px" ForeColor="White" BorderStyle="Solid"
    BorderColor="Black" BackColor="#000084"></HeaderStyle>
    <FooterStyle ForeColor="Black" BackColor="#CCCCCC"></FooterStyle>
    <PagerStyle HorizontalAlign="Center" ForeColor="Black" BackColor="#999999" Mode="NumericPages"></PagerStyle>
    </asp:datagrid>
    
    
  5. En el menú Ver, haga clic en Diseño para volver a la vista de diseño.

    DataGrid aparece en webForm.

  6. En el menú Ver, haga clic en Código para mostrar el código detrás del formulario web. Agregue el código siguiente al controlador de eventos Page_Load:

    Nota Debe cambiar el nombre de usuario> de id. <de usuario y password=<strong password> a los valores correctos antes de ejecutar este código. Asegúrese de que la cuenta de usuario tiene los permisos correctos para realizar esta operación en la base de datos.

    ' Create a connection and open it.
    Dim objConn As New System.Data.SqlClient.SqlConnection("User ID=<username>;Password=<strong password>;Initial Catalog=Northwind;Data Source=SQLServer;")
    objConn.Open()
    
    Dim strSQL As String
    Dim objDataset As New DataSet()
    Dim objAdapter As New System.Data.SqlClient.SqlDataAdapter()
    
    ' Get all the customers from the USA.
    strSQL = "Select * from customers where country='USA'"
    objAdapter.SelectCommand = New System.Data.SqlClient.SqlCommand(strSQL, objConn)
    ' Fill the dataset.
    objAdapter.Fill(objDataset)
    ' Create a new view.
    Dim oView As New DataView(objDataset.Tables(0))
    ' Set up the data grid and bind the data.
    DataGrid1.DataSource = oView
    DataGrid1.DataBind()
    
    ' Verify if the page is to be displayed in Excel.
    If Request.QueryString("bExcel") = "1" Then
        ' Set the content type to Excel.
        Response.ContentType = "application/vnd.ms-excel"
        ' Remove the charset from the Content-Type header.
        Response.Charset = ""
        ' Turn off the view state.
        Me.EnableViewState = False
    
    Dim tw As New System.IO.StringWriter()
        Dim hw As New System.Web.UI.HtmlTextWriter(tw)
    
    ' Get the HTML for the control.
        DataGrid1.RenderControl(hw)
        ' Write the HTML back to the browser.
        Response.Write(tw.ToString())
        ' End the response.
        Response.End()
    End If
    
    

    NOTA Reemplace SQLServer en el código por el nombre de la SQL Server. Si no tiene acceso a un SQL Server que contenga la base de datos de ejemplo Northwind, modifique la cadena de conexión para usar la base de datos Northwind de ejemplo de Microsoft Access 2002:

    provider=microsoft.jet.oledb.4.0; data source=C:\Archivos de programa\Microsoft Office\Office10\Samples\Northwind.mdb

    Si selecciona este método, modifique el código mencionado anteriormente para usar el espacio de nombres OleDbClient en lugar del espacio de nombres SqlClient.

  7. En el menú Proyecto, haga clic en Agregar página HTML. Asigne a la página el nombre Top.htm y, a continuación, haga clic en Abrir.

    Top.htm aparece en la vista Diseño.

  8. En el menú Ver, haga clic en Código fuente HTML. Reemplace el contenido de la ventana de origen HTML por el código siguiente:

    <html>
    <script language="vbscript">
      Sub Button1_onclick        
    
    Select Case Select1.selectedIndex
    
    Case 0' Use Automation.
          Dim sHTML
          sHTML = window.parent.frames("bottom").document.forms(0).children("DataGrid1").outerhtml
          Dim oXL, oBook
          Set oXL = CreateObject("Excel.Application")
          Set oBook = oXL.Workbooks.Add
          oBook.HTMLProject.HTMLProjectItems("Sheet1").Text = sHTML
          oBook.HTMLProject.RefreshDocument
          oXL.Visible = true
          oXL.UserControl = true
    
    Case 1' Use MIME Type (In a New Window).
          window.open("bottom.aspx?bExcel=1")
    
    Case 2' Use MIME Type (In the Frame).
          window.parent.frames("bottom").navigate "bottom.aspx?bExcel=1"
      End Select
    End Sub
    </script>
    <body>
    Export to Excel Using:
    <SELECT id="Select1" size="1" name="Select1">
    <OPTION value="0" selected>Automation</OPTION>
    <OPTION value="1">MIME Type (In a New Window)</OPTION>
    <OPTION value="2">MIME Type (In the Frame)</OPTION>
    </SELECT>
    <INPUT id="Button1" type="button" value="Go!" name="Button1">
    </body>
    </html>
    
    
  9. En el menú Proyecto, haga clic en Agregar página HTML. Asigne a la página el nombre Frameset.htm y, a continuación, haga clic en Abrir.

    Frameset.htm se abre en la vista Diseño.

  10. En el menú Ver, haga clic en Código fuente HTML. Reemplace el contenido de la ventana de origen HTML por el código siguiente:

    <html>
    <frameset rows="10%,90%">
    <frame noresize="0" scrolling="no" name="top" src="top.htm">
    <frame noresize="0" scrolling="yes" name="bottom" src="bottom.aspx">
    </frameset>
    </html>
    
    
  11. En Explorador de soluciones, haga clic con el botón derecho en Frameset.htm y, a continuación, haga clic en Establecer como página de inicio.

  12. On the Build menu, click Build Solution.

¡Pruébelo!

  1. En el menú Depurar, haga clic en Iniciar sin depurar para ejecutar la aplicación.

    Una vez que se abre el conjunto de marcos en el explorador web, datagrid en el marco inferior muestra los datos de la base de datos Northwind.

  2. En la lista desplegable, haga clic en Automatizacióny, a continuación, haga clic en Ir.

    El contenido de DataGrid se muestra fuera del explorador en la ventana de aplicación de Microsoft Excel.

  3. En la lista desplegable, haga clic en Tipo MIME (En una nueva ventana) y, a continuación, haga clic en Ir.

    El contenido de DataGrid se muestra en Excel hospedado en una nueva ventana del explorador web.

    NOTA Si recibe un mensaje para abrir o guardar el archivo de Excel, haga clic en Abrir.

  4. En la lista desplegable, haga clic en Tipo MIME (en el marco) y, a continuación, haga clic en Ir.

    El contenido de DataGrid se muestra en el marco inferior del conjunto de marcos en Excel hospedado en el explorador web.

    NOTA Si recibe un mensaje para abrir o guardar el archivo de Excel, haga clic en Abrir.

Referencias

Para obtener más información, consulte el artículo en Microsoft Knowledge Base:

296717 PRB: Internet Explorer pide al usuario que abra o guarde el archivo de Office transmitido desde ASP.