Excel 从Datatable将xls文件下载到客户端

Excel 从Datatable将xls文件下载到客户端,excel,vb.net,datatable,Excel,Vb.net,Datatable,我正在用VB开发一个关于VisualStudio的网站。在我的站点的一个部分中,我进行了数据库查询,将结果存储在DataTable中并显示出来。我为用户提供了下载信息的选项,我想做的是将包含数据表中信息的XLS文件下载到客户端,而无需在服务器端创建XLS 我目前有以下代码部分将文件发送给用户 Dim fileToDownload = Server.MapPath("~/docs/QuejometroVF.pdf") Response.ContentType = "application/octe

我正在用VB开发一个关于VisualStudio的网站。在我的站点的一个部分中,我进行了数据库查询,将结果存储在DataTable中并显示出来。我为用户提供了下载信息的选项,我想做的是将包含数据表中信息的XLS文件下载到客户端,而无需在服务器端创建XLS

我目前有以下代码部分将文件发送给用户

Dim fileToDownload = Server.MapPath("~/docs/QuejometroVF.pdf")
Response.ContentType = "application/octet-stream"

Dim cd = New ContentDisposition()
cd.Inline = False
cd.FileName = Path.GetFileName(fileToDownload)
Response.AppendHeader("Content-Disposition", cd.ToString())

Dim fileData = System.IO.File.ReadAllBytes(fileToDownload)
Response.OutputStream.Write(fileData, 0, fileData.Length)
但它需要本地文件的路径才能发送

首先,我想知道如何从datatable(仅在内存中)创建xls文件,然后将该对象作为文件发送到客户端计算机。如果不可能,您能告诉我如何在我的服务器中写入xls文件,以便我可以使用上面的代码发送它吗?我还没有真正弄明白怎么做

我想这样做是因为我不想在服务器上保存文件,因为我已经在数据库中保存了这些信息,我也不想假装保存了这些文件


谢谢

我使用以下代码将数据导出到xls文件,我的后端是Oracle数据库,我从中获取数据:

    Dim MyConnection As OracleConnection = OpenConnection(Session("USERNAME"), Session("PASSWORD"))
    Dim MyDataSet As New DataSet
    MyDataSet = GetExportData(MyConnection, Session("UserDataKey"), Session("CompoundKey"), Session("LastOfCompoundKey"))

    'I rename the dataset's table columns to what I want in the xls file
    MyDataSet.Tables!data.Columns(0).ColumnName = "IDNumber"
    MyDataSet.Tables!data.Columns(1).ColumnName = "FirstName"
    MyDataSet.Tables!data.Columns(2).ColumnName = "LastName"
    MyDataSet.Tables!data.Columns(3).ColumnName = "Address"
    MyDataSet.Tables!data.Columns(4).ColumnName = "City"
    MyDataSet.Tables!data.Columns(5).ColumnName = "State"
    MyDataSet.Tables!data.Columns(6).ColumnName = "ZipCode"
    MyDataSet.Tables!data.Columns(7).ColumnName = "Phone_Area"
    MyDataSet.Tables!data.Columns(8).ColumnName = "Phone_Prefix"
    MyDataSet.Tables!data.Columns(9).ColumnName = "Phone_Suffix"
    MyDataSet.Tables!data.Columns(10).ColumnName = "Email"
    MyDataSet.Tables!data.Columns(11).ColumnName = "BirthDay"

    Response.ClearContent()

    'I create the filename I want the data to be saved to and set up the response
    Response.AddHeader("content-disposition", "attachment; filename=" & Replace(Session("Key0"), " ", "-") & "-" & Session("Key1") & "-" & Replace(Replace(Trim(Session("Key2")), ".", ""), " ", "-") & ".xls")

    Response.ContentType = "application/excel"

    Response.Charset = ""

    EnableViewState = False

    Dim tw As New System.IO.StringWriter

    Dim hw As New System.Web.UI.HtmlTextWriter(tw)

    'Create and bind table to a datagrid
    Dim dgTableForExport As New DataGrid

    If MyDataSet.Tables.Count > 0 Then
        If MyDataSet.Tables(0).Rows.Count > 0 Then
            dgTableForExport.DataSource = MyDataSet.Tables(0) ' .DefaultView
            dgTableForExport.DataBind()

            'Finish building response
            Dim strStyle As String = "<style>.text { mso-number-format:\@; } </style>"
            For intTemp As Integer = 0 To MyDataSet.Tables(0).Rows.Count - 1
                For intTemp2 As Integer = 0 To MyDataSet.Tables(0).Columns.Count - 1
                    dgTableForExport.Items(intTemp).Cells(intTemp2).Attributes.Add("class", "text")
                Next
            Next
        End If
    End If


    dgTableForExport.RenderControl(hw)
    Response.Write(style)
    ' Write the HTML back to the browser.                         

    Response.Write(tw.ToString())
    Response.End()

    'Close, clear and dispose
    MyConnection.Close()
    MyConnection.Dispose()
    MyConnection = Nothing
Dim MyConnection As OracleConnection=OpenConnection(会话(“用户名”)、会话(“密码”))
将MyDataSet设置为新数据集
MyDataSet=GetExportData(MyConnection、会话(“UserDataKey”)、会话(“CompoundKey”)、会话(“LastOfCompoundKey”))
'我将数据集的表列重命名为xls文件中所需的名称
我的数据集。表格!data.Columns(0.ColumnName=“IDNumber”
我的数据集。表格!data.Columns(1).ColumnName=“FirstName”
我的数据集。表格!data.Columns(2).ColumnName=“LastName”
我的数据集。表格!data.Columns(3).ColumnName=“地址”
我的数据集。表格!data.Columns(4.ColumnName=“城市”
我的数据集。表格!data.Columns(5.ColumnName=“State”
我的数据集。表格!data.Columns(6.ColumnName=“ZipCode”
我的数据集。表格!data.Columns(7.ColumnName=“电话\区域”
我的数据集。表格!data.Columns(8).ColumnName=“电话前缀”
我的数据集。表格!data.Columns(9).ColumnName=“电话后缀”
我的数据集。表格!data.Columns(10).ColumnName=“电子邮件”
我的数据集。表格!data.Columns(11).ColumnName=“生日”
Response.ClearContent()
'我创建要保存数据的文件名并设置响应
Response.AddHeader(“内容处置”、“附件;文件名=”&Replace(会话(“Key0”)、“”、“-”、“-”、“-”&Session(“Key1”)和“-”&Replace(替换(修剪(会话(“Key2”)、“、”、“-”、“-”、“.xls”)
Response.ContentType=“应用程序/excel”
Response.Charset=“”
EnableViewState=False
Dim tw作为新System.IO.StringWriter
Dim hw作为新系统.Web.UI.HtmlTextWriter(tw)
'创建表并将其绑定到datagrid
Dim dgTableForExport作为新数据网格
如果MyDataSet.Tables.Count>0,则
如果MyDataSet.Tables(0).Rows.Count>0,则
dgTableForExport.DataSource=MyDataSet.Tables(0)'.DefaultView
dgTableForExport.DataBind()
“完成建筑响应
Dim strStyle As String=“.text{mso数字格式:\@;}”
对于MyDataSet.Tables(0).Rows.Count-1,intTemp为整数=0
对于intTemp2,将其作为MyDataSet.Tables(0.Columns.Count)的整数=0
dgTableForExport.Items(intTemp).Cells(intTemp2).Attributes.Add(“类”,“文本”)
下一个
下一个
如果结束
如果结束
dgTableForExport.RenderControl(硬件)
回应。写作(风格)
'将HTML写回浏览器。
Response.Write(tw.ToString())
答复:End()
“关闭、清理和处置
MyConnection.Close()
MyConnection.Dispose()
MyConnection=无

我从我的一个项目中复制并粘贴了此文件,它未经测试,可能包含错误,但应该可以让您开始使用。

我使用以下代码将数据导出到xls文件,我的后端是Oracle数据库,我从中获取数据:

    Dim MyConnection As OracleConnection = OpenConnection(Session("USERNAME"), Session("PASSWORD"))
    Dim MyDataSet As New DataSet
    MyDataSet = GetExportData(MyConnection, Session("UserDataKey"), Session("CompoundKey"), Session("LastOfCompoundKey"))

    'I rename the dataset's table columns to what I want in the xls file
    MyDataSet.Tables!data.Columns(0).ColumnName = "IDNumber"
    MyDataSet.Tables!data.Columns(1).ColumnName = "FirstName"
    MyDataSet.Tables!data.Columns(2).ColumnName = "LastName"
    MyDataSet.Tables!data.Columns(3).ColumnName = "Address"
    MyDataSet.Tables!data.Columns(4).ColumnName = "City"
    MyDataSet.Tables!data.Columns(5).ColumnName = "State"
    MyDataSet.Tables!data.Columns(6).ColumnName = "ZipCode"
    MyDataSet.Tables!data.Columns(7).ColumnName = "Phone_Area"
    MyDataSet.Tables!data.Columns(8).ColumnName = "Phone_Prefix"
    MyDataSet.Tables!data.Columns(9).ColumnName = "Phone_Suffix"
    MyDataSet.Tables!data.Columns(10).ColumnName = "Email"
    MyDataSet.Tables!data.Columns(11).ColumnName = "BirthDay"

    Response.ClearContent()

    'I create the filename I want the data to be saved to and set up the response
    Response.AddHeader("content-disposition", "attachment; filename=" & Replace(Session("Key0"), " ", "-") & "-" & Session("Key1") & "-" & Replace(Replace(Trim(Session("Key2")), ".", ""), " ", "-") & ".xls")

    Response.ContentType = "application/excel"

    Response.Charset = ""

    EnableViewState = False

    Dim tw As New System.IO.StringWriter

    Dim hw As New System.Web.UI.HtmlTextWriter(tw)

    'Create and bind table to a datagrid
    Dim dgTableForExport As New DataGrid

    If MyDataSet.Tables.Count > 0 Then
        If MyDataSet.Tables(0).Rows.Count > 0 Then
            dgTableForExport.DataSource = MyDataSet.Tables(0) ' .DefaultView
            dgTableForExport.DataBind()

            'Finish building response
            Dim strStyle As String = "<style>.text { mso-number-format:\@; } </style>"
            For intTemp As Integer = 0 To MyDataSet.Tables(0).Rows.Count - 1
                For intTemp2 As Integer = 0 To MyDataSet.Tables(0).Columns.Count - 1
                    dgTableForExport.Items(intTemp).Cells(intTemp2).Attributes.Add("class", "text")
                Next
            Next
        End If
    End If


    dgTableForExport.RenderControl(hw)
    Response.Write(style)
    ' Write the HTML back to the browser.                         

    Response.Write(tw.ToString())
    Response.End()

    'Close, clear and dispose
    MyConnection.Close()
    MyConnection.Dispose()
    MyConnection = Nothing
Dim MyConnection As OracleConnection=OpenConnection(会话(“用户名”)、会话(“密码”))
将MyDataSet设置为新数据集
MyDataSet=GetExportData(MyConnection、会话(“UserDataKey”)、会话(“CompoundKey”)、会话(“LastOfCompoundKey”))
'我将数据集的表列重命名为xls文件中所需的名称
我的数据集。表格!data.Columns(0.ColumnName=“IDNumber”
我的数据集。表格!data.Columns(1).ColumnName=“FirstName”
我的数据集。表格!data.Columns(2).ColumnName=“LastName”
我的数据集。表格!data.Columns(3).ColumnName=“地址”
我的数据集。表格!data.Columns(4.ColumnName=“城市”
我的数据集。表格!data.Columns(5.ColumnName=“State”
我的数据集。表格!data.Columns(6.ColumnName=“ZipCode”
我的数据集。表格!data.Columns(7.ColumnName=“电话\区域”
我的数据集。表格!data.Columns(8).ColumnName=“电话前缀”
我的数据集。表格!data.Columns(9).ColumnName=“电话后缀”
我的数据集。表格!data.Columns(10).ColumnName=“电子邮件”
我的数据集。表格!data.Columns(11).ColumnName=“生日”
Response.ClearContent()
'我创建要保存数据的文件名并设置响应
Response.AddHeader(“内容处置”、“附件;文件名=”&Replace(会话(“Key0”)、“”、“-”、“-”、“-”&Session(“Key1”)和“-”&Replace(替换(修剪(会话(“Key2”)、“、”、“-”、“-”、“.xls”)
Response.ContentType=“应用程序/excel”
Response.Charset=“”
EnableViewState=False
Dim tw作为新System.IO.StringWriter
Dim hw作为新系统.Web.UI.HtmlTextWriter(tw)
'创建表并将其绑定到datagrid
Dim dgTableForExport作为新数据网格
如果MyDataSet.Tables.Count>0,则
如果MyDataSet.Tables(0).Rows.Count>0,则
dgTableForExport.DataSource=MyDataSet.Tables(0)'.DefaultView
dgTableForExport.DataBind()
“完成建筑响应
暗淡的STR