我用如下代码导出excel,但是结果却是html形式,如图            Response.Clear();
            Response.Buffer = true;
            Response.Charset = "utf-8";
            Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode("名称", System.Text.Encoding.UTF8) + ".xls");
            Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");     //设置输出流为简体中文
            Response.ContentType = "application/ms-excel";    //设置输出文件类型为excel文件。 
            this.EnableViewState = false;
            System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo("ZH-CN", true);
            System.IO.StringWriter oStringWriter = new System.IO.StringWriter(myCItrad);
            System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
            //   repeater控件的ID
            repeater.RenderControl(oHtmlTextWriter);
            Response.Write(oStringWriter.ToString());
            Response.End();
导出形式:
<tr>
   <td>ID</td>
   <td>Name</td>
</tr>
<tr>
   <td>123</td>
   <td>名字</td>
</tr>实际需要效果是excel形式的
在线等待,急急急

解决方案 »

  1.   


    #region 利用DataTable Html流导出EXCEL文档方法
            /// <summary>
            /// 利用Datatable Html流导出EXCEL
            /// </summary>
            /// <param name="ds"></param>
            /// <param name="fileName"></param>
            private void CreateExcel(DataSet ds)
            {
                HttpResponse response = Page.Response;
                string fileName = "ExportFile" + DateTime.Now.ToShortDateString();
                string excelHeader = string.Empty;
                string excelContent = string.Empty;
                StringBuilder sb = new StringBuilder();            DataTable dt = ds.Tables[0];
                DataRow[] dr = dt.Select();
                int colCount = dt.Columns.Count;
                string headName = string.Empty;            sb.Append("<table border='1'><tr>");
                for (int i = 0; i < colCount; i++)
                {
                    sb.Append("<td style='font-size:small; text-align:center; font-family:@宋体; font-weight:bold;'>");
                    headName = GetHeaderName(dt.Columns[i].Caption);
                    if (i == colCount - 1)
                    {
                        //excelHeader += headName + "\n";
                        sb.Append(headName + "</td></tr>");
                    }
                    else
                    {
                        //excelHeader += headName + "\t";
                        sb.Append(headName + "</td>");
                    }
                }
                foreach (DataRow row in dt.Rows)
                {
                    sb.Append("<tr>");
                    for (int i = 0; i < colCount; i++)
                    {
                        sb.Append("<td style='font-size:small; text-align:center'>");
                        if (i == colCount - 1)
                        {
                            sb.Append(row[i].ToString() + "</td></tr>");
                            //excelContent += row[i].ToString() + "\n";
                        }
                        else
                        {
                            sb.Append(row[i].ToString() + "</td>");
                            //excelContent += row[i].ToString() + "\t";
                        }
                    }
                }
                sb.Append("</table>");
                response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
                //octet-stream html流,vnd.ms-excel-->Excel格式
                response.ContentType = "application/vnd.ms-excel";
                response.AddHeader("Content-Dispositon", "attachment; filename=" + fileName);
                response.Write(@"<html><head>");
                response.Write(@"<meta http-equiv='content-type' content='text/html; charset=gb2312'>");
                response.Write("</head>");
                response.Write("<body>");
                response.Write(sb.ToString());
                response.Write("</body>");
                response.Write(@"</html>");
                response.Write(excelHeader);
                response.Write(excelContent);
                response.Flush();
                response.End();
            }
            /// <summary>
            /// 得到表头名
            /// </summary>
            /// <param name="caption"></param>
            /// <returns></returns>
            private string GetHeaderName(string caption)
            {
                string headName = string.Empty;
                switch (caption)
                {
                    case "ID":
                        headName = "序号";
                        break;
                    case "StudentClass":
                        headName = "班级";
                        break;
                    case "StudentName":
                        headName = "学生";
                        break;
                    case "ChineseGrade":
                        headName = "语文";
                        break;
                    case "MathGrade":
                        headName = "数学";
                        break;
                    case "TotalGrade":
                        headName = "总成绩";
                        break;
                    default:
                        break;
                }
                return headName;
            }
            #endregion详情请见http://blog.csdn.net/davidcoffee/archive/2011/03/30/6290375.aspx
    试试把Response.ContentType = "application/ms-excel"; 
    改成Response.ContentType = "application/vnd.ms-excel";看看~
      

  2.   

    你把Repeater中的数据放如dataset中然后实现dataset导出 excel  public void CreateExcel(DataSet ds,string typeid,string FileName) 
            { 
                HttpResponse resp; 
                resp = Page.Response; 
                resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); 
                resp.AppendHeader("Content-Disposition", "attachment;filename=" + FileName); 
                string colHeaders= "", ls_item=""; 
                int i=0;             //定义表对象和行对像,同时用DataSet对其值进行初始化 
                DataTable dt=ds.Tables[0]; 
                DataRow[] myRow=dt.Select(""); 
                // typeid=="1"时导出为EXCEL格式文档;typeid=="2"时导出为XML格式文档 
                if(typeid=="1") 
                { 
                    //取得数据表各列标题,各标题之间以\t分割,最后一个列标题后加回车符 
                    for(i=0;i<dt.Columns.Count;i++)
                    {                    
                        if(i==dt.Columns.Count-1)
                        {
                            colHeaders +=dt.Columns[i].Caption.ToString() +"\n";    
                        }
                        else
                        {
                            colHeaders+=dt.Columns[i].Caption.ToString()+"\t"; 
                        }
                    }
                    //向HTTP输出流中写入取得的数据信息 
                    resp.Write(colHeaders); 
                    //逐行处理数据 
                    foreach(DataRow row in myRow) 
                    { 
                        //在当前行中,逐列获得数据,数据之间以\t分割,结束时加回车符\n 
                        for(i=0;i<dt.Columns.Count;i++)
                        {
                            
                            if(i==dt.Columns.Count-1)
                            {
                                ls_item += row[i].ToString() +"\n"; 
                            }
                            else
                            {
                                ls_item +=row[i].ToString() + "\t";  
                            }
                        }
                        //当前行数据写入HTTP输出流,并且置空ls_item以便下行数据 
                        resp.Write(ls_item); 
                        ls_item=""; 
                    } 
                } 
                else 
                { 
                    if(typeid=="2") 
                    { 
                        //从DataSet中直接导出XML数据并且写到HTTP输出流中 
                        resp.Write(ds.GetXml()); 
                    } 
                } 
                //写缓冲区中的数据到HTTP头文档中 
                resp.End(); 
            }
      

  3.   


    给你换种方法实现,Repeater导出到Excel
    前台页面加上这么一段js代码
    <head>
    <script type="text/javascript">
            //导出Excel   
            function AllAreaExcel(objtableid) {
                var oXL = new ActiveXObject("Excel.Application");
                var oWB = oXL.Workbooks.Add();
                var oSheet = oWB.ActiveSheet;
                var sel = document.body.createTextRange();
                sel.moveToElementText(document.getElementById(objtableid));
                sel.select();
                sel.execCommand("Copy");
                oSheet.Paste();
                oXL.Visible = true;
            }   
        </script>    <style media="print" type="text/css">
            .Noprint
            {
                display: none;
            }
            .PageNext
            {
                page-break-after: always;
            }
        </style>
    </head>
    <body>
        <table  id="table">
        //这里是你放repeater的地方
        </table>
        <div style="text-align: left">
                <img src="images/dcexcel.gif" onclick='AllAreaExcel("table");' alt="导出到Execl" style="cursor: hand;" />
            </div>
    </body>
      

  4.   

    你可以导出成xml格式 的,excel2003 ,2010都能打开
    http://dotnet.aspx.cc/file/Export-Gridview-To-Excel-With-Multi-Sheet.aspx
      

  5.   

    要完全跟Excel程序生成的一样,你需要使用Excel.Application进行导出
    这样的代码网上也很多
      

  6.   

    虽然都没有解决问题,但是还是谢谢各位好汉了
    问题已经发现并解决了,没有完整的html呈现形式,因此不行
      

  7.   

    恩,楼主说的有道理,就是将完整的table代码包含在repeater中