2013-08-20 2 views
0

У меня есть веб-страница с кнопкой экспорта. Можно ли экспортировать таблицу sql, чтобы преуспеть при нажатии этой кнопки? Я могу сделать это с помощью gridview, но просто попробую кнопку с кодом для выполнения этой работы. Может кто-нибудь указать мне в том направлении, в котором я нуждаюсь?Можно ли экспортировать таблицу sql в excel с помощью asp.net

ответ

1

Если вы хотите этого в Excel, вы можете использовать следующий код. Выберите данные и поместите их в Gridview и выполните следующие действия.

Dim GridView1 As New GridView 

SqlDataSource1.SelectCommand = "SELECT * FROM TableName" 
GridView1.DataSource = SqlDataSource1 
GridView1.DataBind() 

Response.Clear() 
Response.Buffer = True 
Response.ContentType = "application/vnd.ms-excel" 
Response.Charset = "" 
Me.EnableViewState = False 
Dim oStringWriter As New System.IO.StringWriter 
Dim oHtmlTextWriter As New System.Web.UI.HtmlTextWriter(oStringWriter) 

GridView1.RenderControl(oHtmlTextWriter) 

Response.Write(oStringWriter.ToString()) 
Response.End() 

Вы также можете отформатировать Gridview, чтобы он выглядел хорошо на листе Excel.

+0

Да, я уже использовал этот код, но проблема в том, что он будет экспортировать только то, что показано в gridview. Не все строки и столбцы, так как у меня есть пейджинг, и не все столбцы показаны – user1342164

+1

Нет. Вам не обязательно использовать Gridview на странице. Вы можете создать Gridview в коде позади и получить все записи ... Проверьте обновленный код выше. –

+0

Работает спасибо! – user1342164

3

Вот функция полезности вы можете использовать:

Public Shared Sub ExportToSpreadsheet(table As DataTable, filename As String) 
    ' Get a hold of the HTTP context and clear it, because we are going to push the CSV data through the context 
    Dim context = HttpContext.Current 
    context.Response.Clear() 

    ' Loop through each column in your data table 
    For Each column As DataColumn In table.Columns 
     ' Write column names 
     context.Response.Write(column.ColumnName + ";") 
    Next 

    context.Response.Write(Environment.NewLine) 

    ' Loop through each row in the data table 
    For Each row As DataRow In table.Rows 
     ' Loop through each column in row 
     For i As Integer = 0 To table.Columns.Count - 1 
      ' Write each column value 
      context.Response.Write(row(i).ToString().Replace(";", [String].Empty) & ";") 
     Next 

     ' Write a new line between rows of data 
     context.Response.Write(Environment.NewLine) 
    Next 

    ' Set the content type and headers 
    context.Response.ContentType = "text/csv" 
    context.Response.AppendHeader("Content-Disposition", "attachment; filename=" & filename & ".csv") 
    context.Response.[End]() 
End Sub 

Тогда вы можете назвать это так:

ExportToSpreadsheet(YourDataTable, "YourFileName") 

Примечание: Поскольку это Shared функция, то вы можете поместить его в класс полезности и не нужно создавать экземпляр (New) класса для использования функции.

+0

Спасибо, я получил его, но файл не очень чистый, он имеет тонну ;;;;;;; и все, что в колонке, все равно, чтобы сделать это чище? – user1342164

+0

Результат .csv не .xls. Проблема возникает, когда символ разделителя в окнах отсутствует; но, например, , (по умолчанию на английском языке?). – IvanH

+0

Я изменил csv на xls, и это помогло немного, но теперь имена столбцов разделены, просто очень грязные. Да, английский – user1342164

Смежные вопросы