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
Inicie Visual Studio .NET. En el menú Archivo, elija Nuevo y, a continuación, haga clic en Proyecto.
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.
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.
En el menú Ver, haga clic en Origen HTML para agregar el siguiente elemento DataGrid entre el
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>
En el menú Ver, haga clic en Diseño para volver a la vista de diseño.
DataGrid aparece en webForm.
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.
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.
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>
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.
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>
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.
On the Build menu, click Build Solution.
¡Pruébelo!
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.
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.
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.
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.