用GridView导出excel时,发生一个很怪的现象。
用Vista带的IIS发布时,所有浏览器都可以正常保存、打开;
用Windows2003带的IIS发布时,IE6十次有八次会发生保存窗口一闪而过无法保存的情况,IE7、8beta、firefox均不会这种情况。
程序最后一句就是Response.Flush();
感觉跟这个有关,导出数据量很小,但到底被什么截断了,请高手赐教!

解决方案 »

  1.   


    if (mytable.Rows.Count == 0)//mytable是一个DataTable,也可用DataSet,就是你要导出的数据集
            {
                this.Button1.Enabled = false;
                return;
            }
            System.Web.UI.WebControls.GridView dgExport = null; 
                // IO用于导出并返回excel文件 
                System.IO.StringWriter strWriter = null; 
                System.Web.UI.HtmlTextWriter htmlWriter = null;            if (mytable != null)
                {
                    // 设置编码和附件格式 
                    Response.ContentType = "application nd.ms-excel";
                    Response.AppendHeader("Content-Disposition", "attachment;filename=Borrow.xls");
                    Response.Charset = "";
                    Response.ContentEncoding = System.Text.Encoding.UTF8;                // 导出excel文件 
                    strWriter = new System.IO.StringWriter();
                    htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter);                // 为了解决dgData中可能进行了分页的情况,需要重新定义一个无分页的DataGrid 
                    dgExport = new System.Web.UI.WebControls.DataGrid();
                    dgExport.DataSource = mytable.DefaultView;                
                    dgExport.AllowPaging = false;
                    dgExport.DataBind();                // 返回客户端 
                    dgExport.RenderControl(htmlWriter);
                    Response.Write(strWriter.ToString());
                    Response.End();
                }
      

  2.   

    我是用MyXLS控件导出的,感觉控件应该没有问题,关键是发给客户端的那一下,是不是跟Response.Flush();有关呢?XlsDocument xls = new XlsDocument();
                xls.FileName = "LogReport.xls";
                xls.SummaryInformation.Author = "Nick Zhang"; //let them know who's responsible!
                xls.SummaryInformation.Subject = "A report from NCCSM";
                xls.DocumentSummaryInformation.Company = "XXXXX";
                Worksheet sheet = xls.Workbook.Worksheets.Add("LOG");
                Cells cells = sheet.Cells;
                //写标题
                cells.Merge(1, 1, 1, 12);
                Cell head = cells.Add(1, 1, "LOG");
                head.Font.Height = 15 * 20;
                head.Font.FontName = "黑体";
                head.HorizontalAlignment = HorizontalAlignments.Centered;
                //写表头
                string formHead = "";
                for (int i = 0; i < 12; i++)
                {
                    switch (i)
                    {
                        case 0: formHead = "A";
                            break;
                        case 1: formHead = "B";
                            break;
                        case 2: formHead = "C";
                            break;
                        case 3: formHead = "D";
                            break;
                        case 4: formHead = "E";
                            break;
                        case 5: formHead = "F";
                            break;
                        case 6: formHead = "G";
                            break;
                        case 7: formHead = "H";
                            break;
                        case 8: formHead = "I";
                            break;
                        case 9: formHead = "J";
                            break;
                        case 10: formHead = "K";
                            break;
                        case 11: formHead = "L";
                            break;                }
                    Cell cell = cells.Add(2, i + 1, formHead);
                    cell.Font.Bold = true;
                    cell.Font.Height = 11 * 20;
                    cell.UseBorder = true;//使用边框
                    cell.Font.FontName = "黑体";
                    cell.HorizontalAlignment = HorizontalAlignments.Centered;
                }
                for (int i = 0; i < tempGridView.Rows.Count; i++)
                {//写表中内容
                    for (int j = 0; j < 12; j++)
                    {//只要前十二列
                        if (j != 10)
                        {
                            cells.Add(i + 3, j + 1, tempGridView.Rows[i].Cells[j].Text.Replace("&nbsp;", string.Empty));
                        }
                        else
                        {
                            CheckBox cb = (CheckBox)tempGridView.Rows[i].Cells[j].Controls[0];
                            cells.Add(i + 3, j + 1, cb.Checked ? "已审核" : "未审核");                    }
                    }            }            xls.Send();
                 Response.Flush();
            }