1

さまざまな入力で作成されているデータテーブルがあります。結果のテーブルが 35000 行以上になる場合があります。現在、データテーブルはグリッドビューに表示されます。数分後に正常にロードされます。次に、グリッドビューを Excel ファイルにエクスポートするオプションがあります。大きなテーブルをエクスポートするたびに、変換は失敗します。

私の目標は、グリッドビューのステップをバイパスし、フォーマットされたテーブルを取得して、それを直接 Excel ファイルに入れることです。データテーブルがグリッドビュー出力に似ている限り、書き込み/読み込みが高速な場合は csv ファイルにすることもできます。

ここで次のコードを試しましたExport DataTable to 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() は、メモリ内に作成されるテーブルです。次に、それを呼び出してグリッドビューを埋める他のボタンがあります。現在、正常に準拠して実行され、ファイルが正常に作成されます。ただし、ファイルを開こうとすると、このエラーが発生します...

エクセルエラー

これは、xls ファイルと csv ファイルの両方を試したときに発生します。何かが正しく翻訳されていません。解決策はありますか?

4

2 に答える 2

1

(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とファイル名を渡す必要があります。関数を編集したくない場合はCreateDataSource()、最初に次のようにデータセットにマージできます。

Dim dt As DataTable = CreateDataSource()
Dim ds As New DataSet
ds.Merge(dt)
于 2012-09-14T20:03:28.793 に答える
0

あなたの質問は、ファイルを開くことができないというメッセージが表示される理由についてですよね?

Microsoft によると、これは [Dynamic Data Exchange (DDE) を使用する他のアプリケーションを無視する] 設定がオンになっている場合に発生します。(こちらをご覧ください)。リンクには、設定を変更する手順が含まれています。

于 2012-09-14T21:46:45.010 に答える