不依靠控件,有条件导出.
求高人指点~

解决方案 »

  1.   

    /// <summary>
            /// 将Web控件导出
            /// </summary>
            /// <param name="source">控件实例</param>
            /// <param name="type">类型:Excel或Word</param>
            public void ExpertControl(System.Web.UI.Control source, DocumentType type)
            {
                //设置Http的头信息,编码格式
                if (type == DocumentType.Excel)
                {
                    //Excel
                    Response.AppendHeader("Content-Disposition","attachment;filename=result.xls");
                    Response.ContentType = "application/ms-excel";
                }
                else if (type == DocumentType.Word)
                {
                    //Word
                    Response.AppendHeader("Content-Disposition","attachment;filename=result.doc");
                    Response.ContentType = "application/ms-word";
                }
                Response.Charset = "UTF-8";  
                Response.ContentEncoding = System.Text.Encoding.UTF8;             //关闭控件的视图状态
                source.Page.EnableViewState =false;              //初始化HtmlWriter
                System.IO.StringWriter writer = new System.IO.StringWriter() ;
                System.Web.UI.HtmlTextWriter htmlWriter = new System.Web.UI.HtmlTextWriter(writer);
                source.RenderControl(htmlWriter);             //输出
                Response.Write(writer.ToString());
                Response.End();
            }        //文档类型
            public enum DocumentType
            {
                Word,
                Excel
            }
    /// <summary>
    /// 导出Excel
    /// </summary>
    /// <param name="ds">Dataset</param>
    /// <param name="FileName">文件名,包括后缀。如:xxx.xls</param>
    public void CreateExcel(DataSet ds, string FileName)
    {
        HttpResponse resp;
        resp = Page.Response;
        FileName = Page.Server.UrlEncode(FileName); //文件名编码,否则出现乱码
        resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
        resp.AppendHeader("Content-Disposition", "attachment;filename=" + FileName);
        string colHeaders = "", ls_item = "";
        //定义表对象与行对象,同时用DataSet对其值进行初始化 
        DataTable dt = ds.Tables[0];    DataRow[] myRow = dt.Select();//可以类似dt.Select("id>10")之形式达到数据筛选目的
        int i = 0;    int cl = dt.Columns.Count;
        //取得数据表各列标题,各标题之间以t分割,最后一个列标题后加回车符 
        colHeaders = "姓名\t性别\n";
        resp.Write(colHeaders);
        //向HTTP输出流中写入取得的数据信息 
        //逐行处理数据   
        foreach (DataRow row in myRow)
        {
            //当前行数据写入HTTP输出流,并且置空ls_item以便下行数据     
            ls_item += row["Uname"].ToString() + "\t" + row["Usex"].ToString() + "\n";
            resp.Write(ls_item);
            ls_item = "";
        }
        resp.End();
    }
    dataset 导出excel.条件就是你查询出的dataset..
      

  2.   


     /// <summary>
            /// 导出Execl
            /// </summary>
            /// <param name="dta"></param>
            /// <param name="FileName"></param>
            public static void CreateExcel(System.Data.DataTable dta, string FileName, HttpResponse httpResponse)
            {
                HttpResponse resp;
                resp = httpResponse;
                FileName = System.Web.HttpUtility.UrlEncode(System.Text.Encoding.UTF8.GetBytes(FileName));
                resp.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
                resp.AppendHeader("Content-Disposition", "attachment;filename=" + FileName + ".xls");
                StringBuilder colHeaders = new StringBuilder();
                StringBuilder ls_item = new StringBuilder();            //定义表对象与行对象,同时用DataSet对其值进行初始化 
                System.Data.DataTable dtt = dta;
                DataRow[] myRow = dtt.Select();//可以类似dt.Select("id>10")之形式达到数据筛选目的            int i = 0;
                int cl = dtt.Columns.Count;            //取得数据表各列标题,各标题之间以t分割,最后一个列标题后加回车符 
                for (i = 0; i < cl; i++)
                {
                    if (i == (cl - 1))//最后一列,加n
                    {
                        colHeaders.Append(dtt.Columns[i].Caption.ToString().Replace("\n", " ").Replace("\r", " ").Replace("\n", " ").Replace("\r", " ") + "\n");
                    }
                    else
                    {
                        colHeaders.Append(dtt.Columns[i].Caption.ToString().Replace("\n", " ").Replace("\r", " ").Replace("\n", " ").Replace("\r", " ") + "\t");
                    }            }
                resp.Write(colHeaders.ToString().Replace("\r", " "));
                //向HTTP输出流中写入取得的数据信息             //逐行处理数据   
                foreach (DataRow row in myRow)
                {
                    //当前行数据写入HTTP输出流,并且置空ls_item以便下行数据     
                    for (i = 0; i < cl; i++)
                    {
                        if (i == (cl - 1))//最后一列,加n
                        {
                            ls_item.Append(row[i].ToString().Replace("\n", " ").Replace("\r", " ").Replace("\n", " ").Replace("\r", " ") + "\n");
                        }
                        else
                        {
                            ls_item.Append(row[i].ToString().Replace("\n", " ").Replace("\r", " ").Replace("\n", " ").Replace("\r", " ") + "\t");
                        }                }
                    resp.Write(ls_item.ToString().Replace("\r", " "));
                    ls_item.Remove(0, ls_item.Length);            }
                resp.End();
            }