本帖最后由 woyaodubo 于 2014-01-01 15:17:48 编辑

解决方案 »

  1.   

    你中间有一次file.copy是干嘛的,另外你的文件名称可能会因为同一秒的多次操作,引起冲突,可以使用Guid命名,或者精确到毫秒的名称。
      

  2.   

    感觉很BT,我把数据查询部分全部删掉,然后OpenRead一个空白的xsl,下载到的excel还是没经过查询的全部数据,而且还有很多的header,背景之类东西。        protected void Export_Click1(object sender, EventArgs e)
            {
                System.IO.FileStream Reader = System.IO.File.OpenRead(Server.MapPath("../Template.xls"));
                //文件传送的剩余字节数:初始值为文件的总大小
                long Length = Reader.Length;            Response.Buffer = false;
                Response.AddHeader("Connection", "Keep-Alive");
                Response.ContentType = "application/octet-stream";
                Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode("学生成绩.xls"));
                Response.AddHeader("Content-Length", Length.ToString());            byte[] Buffer = new Byte[10000]; //存放欲发送数据的缓冲区
                int ByteToRead; //每次实际读取的字节数            while (Length > 0)
                {
                    //剩余字节数不为零,继续传送
                    if (Response.IsClientConnected)
                    {
                        //客户端浏览器还打开着,继续传送
                        ByteToRead = Reader.Read(Buffer, 0, 10000); //往缓冲区读入数据
                        Response.OutputStream.Write(Buffer, 0, ByteToRead); //把缓冲区的数据写入客户端浏览器
                        Response.Flush(); //立即写入客户端
                        Length -= ByteToRead; //剩余字节数减少
                    }
                    else
                    {
                        //客户端浏览器已经断开,阻止继续循环
                        Length = -1;
                    }
                }            //关闭该文件
                Reader.Close();
                //删除该Excel文件
                //File.Delete(NewFileName);
            }
      

  3.   

    删掉所有的东西,只下载指定的excel,结果下载到的表格里面只有一个按钮,也就是下载要点击的按钮,神马东西都没有。
            protected void Button1_Click(object sender, EventArgs e)
            {
                //打开要下载的文件,并把该文件存放在FileStream中
                System.IO.FileStream Reader = System.IO.File.OpenRead(Server.MapPath("~/PeaceScore_End.xls"));
                //文件传送的剩余字节数:初始值为文件的总大小
                long Length = Reader.Length;            Response.Buffer = false;
                Response.AddHeader("Connection", "Keep-Alive");
                Response.ContentType = "application/octet-stream";
                Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode("学生成绩.xls"));
                Response.AddHeader("Content-Length", Length.ToString());            byte[] Buffer = new Byte[10000]; //存放欲发送数据的缓冲区
                int ByteToRead; //每次实际读取的字节数            while (Length > 0)
                {
                    //剩余字节数不为零,继续传送
                    if (Response.IsClientConnected)
                    {
                        //客户端浏览器还打开着,继续传送
                        ByteToRead = Reader.Read(Buffer, 0, 10000); //往缓冲区读入数据
                        Response.OutputStream.Write(Buffer, 0, ByteToRead); //把缓冲区的数据写入客户端浏览器
                        Response.Flush(); //立即写入客户端
                        Length -= ByteToRead; //剩余字节数减少
                    }
                    else
                    {
                        //客户端浏览器已经断开,阻止继续循环
                        Length = -1;
                    }
                }
                Reader.Close();
            }
      

  4.   

    首先,为什么要写 Response.AddHeader("Connection", "Keep-Alive") 呢? Keep-Alive 是想干什么?其次,下载应该写 Response.End。
      

  5.   

    http://www.cnblogs.com/top5/archive/2010/02/16/1668801.html给个参考