Jak exportovat data v DataGrid v ASP . NET WebForm do Microsoft Excelu

Souhrn

Tento podrobný průvodce slouží k naplnění ovládacího prvku webového serveru DataGrid v ASP.NET Webového formuláře a následnému exportu obsahu tabulky DataGrid do aplikace Microsoft Excel.

Techniky

Tento článek popisuje dvě techniky exportu dat ve službě DataGrid:

  • Použití typu MIME aplikace Excel (nebo typu obsahu)

    Pomocí kódu na straně serveru můžete svázat DataGrid s daty a nechat data otevřít v Excelu na klientském počítači. Chcete-li to provést, nastavte ContentType na application/vnd.ms-excel. Jakmile klient obdrží nový datový proud, zobrazí se data v Excelu, jako by byl obsah otevřen jako nová stránka ve webovém prohlížeči.

  • Použití automatizace Excelu

    Pomocí kódu na straně klienta můžete extrahovat kód HTML z objektu DataGrid a potom automatizovat Excel tak, aby se kód HTML zobrazil v novém sešitu. Díky automatizaci Excelu se data vždy zobrazují mimo prohlížeč v okně aplikace Excel. Jednou z výhod automatizace je, že excel můžete programově řídit, pokud chcete sešit po exportu dat upravit. Protože ale Excel není označený jako bezpečný pro skriptování, musí klienti použít nastavení zabezpečení ve webovém prohlížeči, které umožňují automatizaci.

Podrobné

  1. Spusťte Visual Studio .NET. V nabídce Soubor přejděte na příkaz Nový a potom klepněte na příkaz Projekt.

  2. V podokně Typy projektů klikněte na Projekty jazyka Visual Basic. V části Šablony klikněte na ASP.NET webovou aplikaci. Pojmenujte aplikaci ExcelExport a potom klikněte na OK.

    WebForm1 se zobrazí v návrhovém zobrazení za vás.

  3. V Průzkumník řešení klikněte pravým tlačítkem na WebForm1.aspx a potom klikněte na Přejmenovat. Změňte název souboru na Bottom.aspx.

  4. V nabídce Zobrazit klepněte na tlačítko Zdroj HTML přidat následující DataGrid mezi

    a
    Tagy:

    <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. V nabídce Zobrazit se kliknutím na návrh vraťte do návrhového zobrazení.

    Objekt DataGrid se zobrazí ve webovémformuláři.

  6. V nabídce Zobrazit klepněte na tlačítko Kód zobrazíte kód za webový formulář. Do obslužné rutiny události Page_Load přidejte následující kód:

    Poznámka Před spuštěním tohoto kódu je nutné změnit <uživatelské jméno> a heslo uživatele =< silné heslo> na správné hodnoty. Ujistěte se, že uživatelský účet má správná oprávnění k provedení této operace v databázi.

    ' 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
    
    

    POZNÁMKA Nahraďte SQLServer v kódu názvem vašeho SQL Server. Pokud nemáte přístup k SQL Server obsahující ukázkovou databázi Northwind, upravte připojovací řetězec tak, aby používal ukázkovou databázi Northwind aplikace Microsoft Access 2002:

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

    Pokud vyberete tuto metodu, upravte výše uvedený kód tak, aby místo oboru názvů SqlClient používal obor názvů OleDbClient.

  7. V nabídce Projekt klikněte na Přidat stránku HTML. Pojmenujte stránku Top.htm a klikněte na Otevřít.

    Top.htm se zobrazí v návrhovém zobrazení.

  8. V nabídce Zobrazit klepněte na tlačítko Zdroj HTML. Obsah okna zdroje HTML nahraďte následujícím kódem:

    <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. V nabídce Projekt klikněte na Přidat stránku HTML. Pojmenujte stránku Frameset.htm a klikněte na Otevřít.

    Frameset.htm se otevře v návrhovém zobrazení.

  10. V nabídce Zobrazit klepněte na tlačítko Zdroj HTML. Obsah okna zdroje HTML nahraďte následujícím kódem:

    <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. V Průzkumník řešení klikněte pravým tlačítkem na Frameset.htm a potom klikněte na Nastavit jako úvodní stránku.

  12. V nabídce Sestavení klikněte na Sestavit řešení.

Vyzkoušejte si to!

  1. V nabídce Ladění klepněte na tlačítko Spustit bez ladění spusťte aplikaci.

    Po otevření sady rámců ve webovém prohlížeči zobrazí DataGrid v dolním rámečku data z databáze Northwind.

  2. V rozevíracím seznamu klikněte na Automation a potom klikněte na Přejít.

    Obsah DataGridu se zobrazí mimo prohlížeč v okně aplikace Microsoft Excel.

  3. V rozevíracím seznamu klikněte na typ MIME (v novém okně) a potom klikněte na Přejít.

    Obsah DataGridu se zobrazí v Excelu hostovaném v novém okně webového prohlížeče.

    POZNÁMKA Pokud se zobrazí výzva k otevření nebo uložení excelového souboru, klikněte na Otevřít.

  4. V rozevíracím seznamu klikněte na Typ MIME (V rámečku) a potom klikněte na Přejít.

    Obsah DataGridu se zobrazí v dolním rámečku sady rámců v Excelu hostované ve webovém prohlížeči.

    POZNÁMKA Pokud se zobrazí výzva k otevření nebo uložení excelového souboru, klikněte na Otevřít.

Odkazy

Další informace naleznete v článku znalostní báze Microsoft Knowledge Base:

296717 PRB: Internet Explorer vyzve uživatele k otevření nebo uložení souboru Office streamovaného z ASP