DataTable数据导出成Excel文件的小例子

  

复制代码 代码如下:

  ///

  /// 将DataTable中的数据导出到指定的Excel文件中

  ///

  /// Web页面对象

  /// 包含被导出数据的DataTable对象

  /// Excel文件的名称

  public static void Export(System.Web.UI.Page page,System.Data.DataTable tab,string FileName)

  {

  System.Web.HttpResponse httpResponse = page.Response;

  System.Web.UI.WebControls.DataGrid dataGrid=new System.Web.UI.WebControls.DataGrid();

  dataGrid.DataSource=tab.DefaultView;

  dataGrid.AllowPaging = false;

  dataGrid.HeaderStyle.BackColor = System.Drawing.Color.Green;

  dataGrid.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;

  dataGrid.HeaderStyle.Font.Bold = true;

  dataGrid.DataBind();

  httpResponse.AppendHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode(FileName,System.Text.Encoding.UTF8)); //filename="*.xls";

  httpResponse.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");

  httpResponse.ContentType ="application/ms-excel";

  System.IO.StringWriter tw = new System.IO.StringWriter() ;

  System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter (tw);

  dataGrid.RenderControl(hw);

  string filePath = page.Server.MapPath("..")+"//Files//" +FileName;

  System.IO.StreamWriter sw = System.IO.File.CreateText(filePath);

  sw.Write(tw.ToString());

  sw.Close();

  DownFile(httpResponse,FileName,filePath);

  httpResponse.End();

  }

  private static bool DownFile(System.Web.HttpResponse Response,string fileName,string fullPath)

  {

  try

  {

  Response.ContentType = "application/octet-stream";

  Response.AppendHeader("Content-Disposition","attachment;filename=" +

  HttpUtility.UrlEncode(fileName,System.Text.Encoding.UTF8) + ";charset=GB2312");

  System.IO.FileStream fs= System.IO.File.OpenRead(fullPath);

  long fLen=fs.Length;

  int size=102400;//每100K同时下载数据

  byte[] readData = http://www.glzy8.com/yongle_tianya/archive/2011/10/24/new byte[size];//指定缓冲区的大小

  if(size>fLen)size=Convert.ToInt32(fLen);

  long fPos=0;

  bool isEnd=false;

  while (!isEnd)

  {

  if((fPos+size)>fLen)

  {

  size=Convert.ToInt32(fLen-fPos);

  readData = http://www.glzy8.com/yongle_tianya/archive/2011/10/24/new byte[size];

  isEnd=true;

  }

  fs.Read(readData, 0, size);//读入一个压缩块

  Response.BinaryWrite(readData);

  fPos+=size;

  }

  fs.Close();

  System.IO.File.Delete(fullPath);

  return true;

  }

  catch

  {

  return false;

  }

  }