How To Export Data in a DataGrid on an ASP . NET WebForm zu Microsoft Excel

Zusammenfassung

Verwenden Sie diese schrittweise Anleitung, um ein DataGrid-Webserversteuerelement auf einem ASP.NET WebForm aufzufüllen und dann den Inhalt des DataGrid nach Microsoft Excel zu exportieren.

Techniken

In diesem Artikel werden zwei Techniken zum Exportieren der Daten im DataGrid beschrieben:

  • Verwenden des Excel MIME-Typs (oder Inhaltstyps)

    Mit serverseitigem Code können Sie das DataGrid an Ihre Daten binden und die Daten in Excel auf einem Clientcomputer öffnen lassen. Legen Sie dazu "ContentType" auf "application/vnd.ms-excel" fest. Nachdem der Client den neuen Datenstrom empfangen hat, werden die Daten in Excel so angezeigt, als ob der Inhalt als neue Seite im Webbrowser geöffnet wurde.

  • Verwenden der Excel-Automatisierung

    Mit clientseitigem Code können Sie den HTML-Code aus dem DataGrid extrahieren und dann Excel automatisieren, um den HTML-Code in einer neuen Arbeitsmappe anzuzeigen. Bei der Excel-Automatisierung werden die Daten immer außerhalb des Browsers in einem Excel-Anwendungsfenster angezeigt. Ein Vorteil der Automatisierung besteht darin, dass Sie Excel programmgesteuert steuern können, wenn Sie die Arbeitsmappe nach dem Exportieren der Daten ändern möchten. Da Excel jedoch nicht als sicher für Skripts gekennzeichnet ist, müssen Ihre Clients Sicherheitseinstellungen im Webbrowser anwenden, die die Automatisierung zulassen.

Schritt für Schritt

  1. Starten Sie Visual Studio .NET. Zeigen Sie im Menü Datei auf Neu, und klicken Sie dann auf Projekt.

  2. Klicken Sie im Bereich "Projekttypen" auf "Visual Basic-Projekte". Klicken Sie unter "Vorlagen" auf ASP.NET Webanwendung. Benennen Sie die Anwendung "ExcelExport", und klicken Sie dann auf "OK".

    WebForm1 wird in der Entwurfsansicht für Sie angezeigt.

  3. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf "WebForm1.aspx", und klicken Sie dann auf "Umbenennen". Ändern Sie den Namen der Datei in "Bottom.aspx".

  4. Klicken Sie im Menü "Ansicht" auf "HTML-Quelle", um das folgende DataGrid zwischen der

    und
    Schilder:

    <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. Klicken Sie im Menü "Ansicht" auf "Entwurf", um zur Entwurfsansicht zurückzukehren.

    Das DataGrid wird im WebForm angezeigt.

  6. Klicken Sie im Menü "Ansicht" auf "Code", um den Code hinter dem Webformular anzuzeigen. Fügen Sie dem Page_Load-Ereignishandler den folgenden Code hinzu:

    Hinweis Sie müssen den Benutzernamen> der Benutzer-ID <und das Kennwort =<sicheres Kennwort> in die richtigen Werte ändern, bevor Sie diesen Code ausführen. Stellen Sie sicher, dass das Benutzerkonto über die richtigen Berechtigungen zum Ausführen dieses Vorgangs für die Datenbank verfügt.

    ' 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
    
    

    HINWEIS Ersetzen Sie SQLServer im Code durch den Namen Ihres SQL Server. Wenn Sie keinen Zugriff auf eine SQL Server haben, die die Northwind-Beispieldatenbank enthält, ändern Sie die Verbindungszeichenfolge so, dass die Northwind-Beispieldatenbank von Microsoft Access 2002 verwendet wird:

    provider=microsoft.jet.oledb.4.0; data source=C:\Program Files\Microsoft Office\Office10\Samples\Northwind.mdb

    Wenn Sie diese Methode auswählen, ändern Sie den oben genannten Code so, dass der OleDbClient-Namespace anstelle des SqlClient-Namespace verwendet wird.

  7. Klicken Sie im Menü "Projekt" auf "HTML-Seite hinzufügen". Benennen Sie die Seite Top.htm, und klicken Sie dann auf "Öffnen".

    Top.htm wird in der Entwurfsansicht angezeigt.

  8. Klicken Sie im Menü "Ansicht" auf "HTML-Quelle". Ersetzen Sie den Inhalt des HTML-Quellfensters durch den folgenden Code:

    <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. Klicken Sie im Menü "Projekt" auf "HTML-Seite hinzufügen". Benennen Sie die Seite Frameset.htm, und klicken Sie dann auf "Öffnen".

    Frameset.htm wird in der Entwurfsansicht geöffnet.

  10. Klicken Sie im Menü "Ansicht" auf "HTML-Quelle". Ersetzen Sie den Inhalt des HTML-Quellfensters durch den folgenden Code:

    <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. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf Frameset.htm, und klicken Sie dann auf "Als Startseite festlegen".

  12. On the Build menu, click Build Solution.

Probieren Sie es aus!

  1. Klicken Sie im Menü "Debuggen" auf "Ohne Debuggen starten", um die Anwendung auszuführen.

    Nachdem das Frameset im Webbrowser geöffnet wurde, zeigt das DataGrid im unteren Frame die Daten aus der Northwind-Datenbank an.

  2. Klicken Sie in der Dropdownliste auf "Automatisierung" und dann auf "Gehe zu".

    Die DataGrid-Inhalte werden außerhalb des Browsers im Microsoft Excel-Anwendungsfenster angezeigt.

  3. Klicken Sie in der Dropdownliste auf MIME-Typ (In einem neuen Fenster) und dann auf "Los".

    Die DataGrid-Inhalte werden in Excel angezeigt, das in einem neuen Webbrowserfenster gehostet wird.

    HINWEIS Wenn Sie aufgefordert werden, die Excel-Datei zu öffnen oder zu speichern, klicken Sie auf "Öffnen".

  4. Klicken Sie in der Dropdownliste auf MIME-Typ (Im Frame) und dann auf "Los".

    Die DataGrid-Inhalte werden im unteren Frame des Framesets in Excel angezeigt, das im Webbrowser gehostet wird.

    HINWEIS Wenn Sie aufgefordert werden, die Excel-Datei zu öffnen oder zu speichern, klicken Sie auf "Öffnen".

References

Weitere Informationen finden Sie im Artikel in der Microsoft Knowledge Base:

296717 PRB: Internet Explorer fordert den Benutzer zum Öffnen/Speichern einer office-Datei auf, die aus ASP gestreamt wurde