簡體   English   中英

使用保存對話框將數據表導出到Excel文件

[英]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。 現在,它已成功符合要求並運行,然后成功創建了文件。 雖然,當文件嘗試打開時出現此錯誤...

Excel錯誤

當我同時嘗試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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM