![](/img/trans.png)
[英]“Save As” Dialog in ASP.Net for exporting an excel file? (service account)
[英]Exporting datatable to excel file with save dialog
我有一個由各種輸入創建的數據表。 有時結果表是35000+行。 當前,數據表已顯示在gridview上。 幾分鍾后加載正常。 然后,有一個選項可以將gridview導出到excel文件。 每當我們要導出一個大表時,轉換都會失敗。
我的目標是繞過gridview步驟並獲取格式化的表格,並將其直接放入Excel文件中。 如果數據寫入/加載與gridview輸出類似,則如果寫入/加載速度更快,也可以是csv文件。
我在這里嘗試了以下代碼, 將DataTable導出到Excel File 。 我盡力將其轉換為vb,在這里...
Protected Sub btnExportData_Click(sender As Object, e As EventArgs) Handles btnExportData.Click
Dim dt As DataTable
dt = CreateDataSource()
Dim filename As String = "attachment; filename=DistComplain.xls"
Response.ClearContent()
Response.AddHeader("content-disposition", filename)
Response.ContentType = "application/vnd.ms-excel"
Dim tab As String = ""
For Each dc As DataColumn In dt.Columns
Response.Write((tab + dc.ColumnName))
tab = "" & vbTab
Next
Response.Write("" & vbLf)
Dim i As Integer
For Each dr As DataRow In dt.Rows
tab = ""
i = 0
Do While (i < dt.Columns.Count)
Response.Write((tab + dr(i).ToString))
tab = "" & vbTab
i = (i + 1)
Loop
Response.Write("" & vbLf)
Next
Response.End()
End Sub
CreateDataSource()是在內存中創建的表。 然后還有其他按鈕可以調用它來填充gridview。 現在,它已成功符合要求並運行,然后成功創建了文件。 雖然,當文件嘗試打開時出現此錯誤...
當我同時嘗試xls和csv文件時,會發生這種情況。 某些內容未正確翻譯。 有什么辦法嗎?
(在Google的幫助下編寫)使用StringWriter類創建導出:
Public Shared Sub ExportDataSetToExcel(ds As DataSet, filename As String)
Dim response As HttpResponse = HttpContext.Current.Response
'Clean response object
response.Clear()
response.Charset = ""
'Set response header
response.ContentType = "application/vnd.ms-excel"
response.AddHeader("Content-Disposition", "attachment;filename=""" & filename & """")
'Create StringWriter and use to create CSV
Using sw As New StringWriter()
Using htw As New HtmlTextWriter(sw)
'Instantiate DataGrid
Dim dg As New DataGrid()
dg.DataSource = ds.Tables(0)
dg.DataBind()
dg.RenderControl(htw)
response.Write(sw.ToString())
response.[End]()
End Using
End Using
End Sub
您只需要傳遞函數DataSet和File Name。 如果您不想編輯CreateDataSource()
函數,則可以先將其合並到DataSet中,如下所示:
Dim dt As DataTable = CreateDataSource()
Dim ds As New DataSet
ds.Merge(dt)
您的問題是關於為什么收到關於無法打開文件的消息,對嗎?
根據Microsoft,當您打開“忽略使用動態數據交換(DDE)的其他應用程序”設置時,會發生這種情況。 (請參閱此處 )。 該鏈接包含更改設置的說明。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.