从Web页面把SQL导出Excel,如何既保存在服务器端,又能自动导出到客户端。

来源:互联网 发布:bp网络和神经网络区别 编辑:程序博客网 时间:2024/05/01 00:57

1、数据表Temp 中关键要建立Id字段并设置为标识主键。

 2、引用为

protected void Button1_Click(object sender, EventArgs e)
    {
         DataTable dt = Connect.BindTable(" SELECT * FROM  Temp  Order by Id  Desc");
        Export(this, dt, this.tbValidTime.Text + '-' + this.tbEnd.Text + "在线统计报表.xls");
    }

3、定义

 public static void Export(System.Web.UI.Page page, System.Data.DataTable tab, string FileName)  //Book1.xls
    {
        System.Web.HttpResponse httpResponse = page.Response;
        System.Web.UI.WebControls.DataGrid dataGrid = new System.Web.UI.WebControls.DataGrid();
        dataGrid.DataSource = tab.DefaultView;
        dataGrid.AllowPaging = false;
        dataGrid.HeaderStyle.BackColor = System.Drawing.Color.Green;
        dataGrid.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
        dataGrid.HeaderStyle.Font.Bold = true;
        dataGrid.DataBind();
        httpResponse.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8));   //filename="*.xls";  
        httpResponse.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
        httpResponse.ContentType = "application/ms-excel";
        System.IO.StringWriter tw = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
        dataGrid.RenderControl(hw);

        string filePath = page.Server.MapPath("..") + "//Files//" + FileName;
        System.IO.StreamWriter sw = System.IO.File.CreateText(filePath);
        sw.Write(tw.ToString());
        sw.Close();

        DownFile(httpResponse, FileName, filePath);

        httpResponse.End();
    }
  

    private static bool DownFile(System.Web.HttpResponse Response, string fileName, string fullPath)
    {
        try
        {
            Response.ContentType = "application/octet-stream";

            Response.AppendHeader("Content-Disposition", "attachment;filename=" +
            HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8) + ";charset=GB2312");
            System.IO.FileStream fs = System.IO.File.OpenRead(fullPath);
            long fLen = fs.Length;
            int size = 102400;//每100K同时下载数据    
            byte[] readData = new byte[size];//指定缓冲区的大小    
            if (size > fLen) size = Convert.ToInt32(fLen);
            long fPos = 0;
            bool isEnd = false;
            while (!isEnd)
            {
                if ((fPos + size) > fLen)
                {
                    size = Convert.ToInt32(fLen - fPos);
                    readData = new byte[size];
                    isEnd = true;
                }
                fs.Read(readData, 0, size);//读入一个压缩块    
                Response.BinaryWrite(readData);
                fPos += size;
            }
            fs.Close();
            System.IO.File.Delete(fullPath);
            return true;
        }
        catch
        {
            return false;
        }
    }

 

 

http://blog.csdn.net/anya/archive/2009/03/28/4032571.aspx

原创粉丝点击