Jak eksportować dane w usłudze DataGrid na platformie ASP. NET WebForm to Microsoft Excel

Podsumowanie

Ten przewodnik krok po kroku umożliwia wypełnienie kontrolki serwera sieci Web usługi DataGrid na ASP.NET WebForm, a następnie wyeksportowanie zawartości usługi DataGrid do programu Microsoft Excel.

Technik

W tym artykule opisano dwie techniki eksportowania danych w usłudze DataGrid:

  • Używanie typu MIME programu Excel (lub typu zawartości)

    Kod po stronie serwera umożliwia powiązanie usługi DataGrid z danymi i otwarcie danych w programie Excel na komputerze klienckim. W tym celu ustaw właściwość ContentType na application/vnd.ms-excel. Gdy klient otrzyma nowy strumień, dane będą wyświetlane w programie Excel tak, jakby zawartość została otwarta jako nowa strona w przeglądarce sieci Web.

  • Korzystanie z usługi Excel Automation

    Kod po stronie klienta umożliwia wyodrębnienie kodu HTML z usługi DataGrid, a następnie zautomatyzowanie programu Excel w celu wyświetlenia kodu HTML w nowym skoroszycie. W przypadku usługi Excel Automation dane są zawsze wyświetlane poza przeglądarką w oknie aplikacji programu Excel. Jedną z zalet usługi Automation jest programowe sterowanie programem Excel, jeśli chcesz zmodyfikować skoroszyt po wyeksportowaniu danych. Jednak ponieważ program Excel nie jest oznaczony jako bezpieczny do obsługi skryptów, klienci muszą stosować ustawienia zabezpieczeń w przeglądarce sieci Web, które zezwalają na usługę Automation.

Umożliwiający intuicyjne

  1. Uruchom program Visual Studio .NET. W menu Plik wskaż polecenie Nowy, a następnie kliknij Projekt.

  2. W okienku Typy projektów kliknij pozycję Projekty Visual Basic. W obszarze Szablony kliknij pozycję ASP.NET aplikacji internetowej. Nadaj aplikacji nazwę ExcelExport, a następnie kliknij przycisk OK.

    W widoku projektu zostanie wyświetlony kształt WebForm1.

  3. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy pozycję WebForm1.aspx, a następnie kliknij pozycję Zmień nazwę. Zmień nazwę pliku na Bottom.aspx.

  4. W menu Widok kliknij pozycję Źródło HTML, aby dodać następującą usługę DataGrid między

    i
    Tagi:

    <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. W menu Widok kliknij pozycję Projekt, aby powrócić do widoku projektu.

    Element DataGrid zostanie wyświetlony w formularzu WebForm.

  6. W menu Widok kliknij pozycję Kod, aby wyświetlić kod za formularzem internetowym. Dodaj następujący kod do procedury obsługi zdarzeń Page_Load:

    Uwaga Przed uruchomieniem <tego kodu należy zmienić nazwę użytkownika> identyfikatora użytkownika i hasło=<silne hasło> na poprawne wartości. Upewnij się, że konto użytkownika ma odpowiednie uprawnienia do wykonywania tej operacji w bazie danych.

    ' 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
    
    

    UWAGA Zastąp wartość SQLServer w kodzie nazwą SQL Server. Jeśli nie masz dostępu do SQL Server zawierającego przykładową bazę danych northwind, zmodyfikuj parametry połączenia, aby użyć przykładowej bazy danych Microsoft Access 2002 Northwind:

    provider=microsoft.jet.oledb.4.0; źródło danych=C:\Program Files\Microsoft Office\Office10\Samples\Northwind.mdb

    Jeśli wybierzesz tę metodę, zmodyfikuj wyżej wymieniony kod, aby używał przestrzeni nazw OleDbClient, a nie przestrzeni nazw SqlClient.

  7. W menu Project (Projekt) kliknij pozycję Dodaj stronę HTML. Nadaj stronie nazwę Top.htm, a następnie kliknij przycisk Otwórz.

    Top.htm pojawi się w widoku projektu.

  8. W menu Widok kliknij pozycję Źródło HTML. Zastąp zawartość okna źródłowego HTML następującym kodem:

    <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. W menu Project (Projekt) kliknij pozycję Dodaj stronę HTML. Nadaj stronie nazwę Frameset.htm, a następnie kliknij przycisk Otwórz.

    Frameset.htm zostanie otwarta w widoku projektu.

  10. W menu Widok kliknij pozycję Źródło HTML. Zastąp zawartość okna źródłowego HTML następującym kodem:

    <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. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy Frameset.htm, a następnie kliknij pozycję Ustaw jako stronę początkową.

  12. W menu Kompilacja kliknij pozycję Kompiluj rozwiązanie.

Wypróbuj to!

  1. W menu Debugowanie kliknij przycisk Uruchom bez debugowania, aby uruchomić aplikację.

    Po otwarciu zestawu ramek w przeglądarce sieci Web usługa DataGrid w dolnej ramce wyświetli dane z bazy danych Northwind.

  2. Na liście rozwijanej kliknij pozycję Automatyzacja, a następnie kliknij pozycję Przejdź.

    Zawartość usługi DataGrid jest wyświetlana poza przeglądarką w oknie aplikacji programu Microsoft Excel.

  3. Na liście rozwijanej kliknij pozycję Typ MIME (W nowym oknie), a następnie kliknij przycisk Przejdź.

    Zawartość usługi DataGrid jest wyświetlana w programie Excel hostowanym w nowym oknie przeglądarki sieci Web.

    UWAGA Jeśli zostanie wyświetlony monit o otwarcie lub zapisanie pliku programu Excel, kliknij przycisk Otwórz.

  4. Na liście rozwijanej kliknij pozycję Typ MIME (W ramce), a następnie kliknij przycisk Przejdź.

    Zawartość usługi DataGrid jest wyświetlana w dolnej ramce zestawu ramek w programie Excel hostowanym w przeglądarce sieci Web.

    UWAGA Jeśli zostanie wyświetlony monit o otwarcie lub zapisanie pliku programu Excel, kliknij przycisk Otwórz.

Informacje

Aby uzyskać dodatkowe informacje, zapoznaj się z artykułem w bazie wiedzy Microsoft Knowledge Base:

296717 PRB: program Internet Explorer monituje użytkownika o otwarcie/zapisanie pliku pakietu Office przesyłanego strumieniowo z usługi ASP