excel导出续

StringBuilder sb = new StringBuilder();            StringWriter sw = new StringWriter(sb);            HtmlTextWriter htw = new HtmlTextWriter(sw);            Page page = new Page();            HtmlForm form = new HtmlForm();            gdvHidden.DataSource = VSDataTableGv;            gdvHidden.DataBind();            gdvHidden.EnableViewState = false;            page.EnableEventValidation = false;            page.DesignerInitialize();            page.Controls.Add(form);            form.Controls.Add(gdvHidden);            page.RenderControl(htw);            Response.Clear();            Response.Buffer = true;            Response.ContentType = "application/vnd.ms-excel";            Response.AddHeader("Content-Disposition", "attachment;filename=" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + "_Detail.xls");            Response.Charset = "UTF-8";            Response.ContentEncoding = Encoding.Default;            Response.Write(sb.ToString());            Response.End();

如果导出的文件过大,则需要用下面的方法,逐步导出

private void GetExcel( DataTable dt,string workName)
  {
   Byte[] buffer;
   string downloadFileName = workName + ".xls";

   this.Response.Clear();
   this.Response.ClearContent();
   this.Response.ClearHeaders();
   this.Response.Buffer = false;
   Response.ContentType ="application/ms-excel";
   Response.AddHeader("Content-Disposition", "attachment; filename=" + downloadFileName);

   string data = string.Empty;      
   data += "<table cellspacing=\"0\" cellpadding=\"5\" rules=\"all\" border=\"1\">";     
   //写出列名       
   data += "<tr style=\"font-weight: bold; white-space: nowrap;\">";       
   foreach (DataColumn column in dt.Columns)   
   {          
    data += "<td>" + column.Caption + "</td>";   
   }      
   data += "</tr>";      
   buffer = System.Text.Encoding.UTF8.GetBytes(data);
   Response.OutputStream.Write(buffer, 0, buffer.Length);
   Response.Flush();
   data ="";
   for ( int i=0;i < dt.Rows.Count; i++ )
   {
    data += "<tr>";          
    foreach (DataColumn column in dt.Columns)        
    {               
     data += "<td style=\"vnd.ms-excel.numberformat:@\">" + dt.Rows[i][column].ToString() + "</td>"; 
    }          
    data += "</tr>"; 
    
    if( i% 100 == 0  || i ==  dt.Rows.Count-1 )
    {
     buffer = System.Text.Encoding.UTF8.GetBytes(data);
     Response.OutputStream.Write(buffer, 0, buffer.Length);
     Response.Flush();
     data= "";
    }


   }

   data = "</table>";
   buffer = System.Text.Encoding.UTF8.GetBytes(data);
   Response.OutputStream.Write(buffer, 0, buffer.Length);
   Response.Flush();

   this.Response.Clear();
   this.Response.Close();
   this.Response.End();
  }

posted @ 2011-06-13 15:12  Jake.Xu  阅读(194)  评论(0编辑  收藏  举报