在Asp.net中把DataGrid导出成Excel或者Word文档

private void Button1_Click(object sender, System.EventArgs e)
  {
   //导入到Word中
   Export(this.DataGrid1,"FileName.doc","application/ms-word");

   //导入到Excel中
    Export(this.DataGrid1,"FileName.xls","application/ms-excel");


  }

 //调用导出方法
  private void Export(System.Web.UI.WebControls.DataGrid dg,string fileName,string typeName)
  {
   System.Web.HttpResponse httpResponse = Page.Response;
   httpResponse.AppendHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode(fileName,System.Text.Encoding.UTF8));
   httpResponse.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");
   httpResponse.ContentType = typeName;
   System.IO.StringWriter  tw = new System.IO.StringWriter() ;
   System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter (tw);
   dg.RenderControl(hw);
   string filePath = Server.MapPath("..")+fileName;
   System.IO.StreamWriter sw = System.IO.File.CreateText(filePath);
   sw.Write(tw.ToString());
   sw.Close();

   DownFile(httpResponse,fileName,filePath);
   httpResponse.End();
  }

 //导出内容
  private  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 = 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 = 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;
   }
  }

posted @ 2007-07-23 14:33  peak  阅读(344)  评论(0)    收藏  举报