asp.net导出到Excel的最佳选择

在实际中可能经常要遇到将数据导出到excel中.

    在asp.net项目中导出到excel可以有以下三中方法:

方法优点缺点
1.使用active加javascript 不用刷新页面在客户端运行  
2.在服务器端导出excel 对客户端没有要求 需要安装excel组件,在导出过程中可能导致excel进程无法关闭,出现大量excel进程
3.通过先绑定到控件然后导出 对客户端没有要求,不需要安装excel组件,可以定义字体样式,能一次绑定批量导出。 只能用于web

可能大家常用的是2和3,特别是在windows项目中那就只能使用方法2了。但是我认为在web asp.net项目中使用第3种更方便。因此我也根据实际需要写了一个类,可以快速调用:

 


public class ExportHelper
  {

    
public static void ExportToExcel(IList dataList, string[] fields, string[] headTexts,string title)
    {
      GridView gvw 
= new GridView();
      
int ColCount, i;

      
//如果筛选的字段和对应的列头名称个数相对的情况下只导出指定的字段
      if (fields.Length != 0 && fields.Length == headTexts.Length)
      {
        ColCount 
= fields.Length;
        gvw.AutoGenerateColumns 
= false;

        
for (i = 0; i < ColCount; i++)
        {
          BoundField bf 
= new BoundField();
          bf.DataField 
= fields[i];
          bf.HeaderText 
= headTexts[i];
          gvw.Columns.Add(bf);
        }
      }
      
else
      {
        gvw.AutoGenerateColumns 
= true;
      }

      SetStype(gvw);
      gvw.DataSource 
= dataList;
      gvw.DataBind();

      ExportToExcel(gvw,title);
    }
    
/// <summary>
    
/// 导出数据到Excel
    
/// </summary>
    
/// <param name="DataList">IList Data</param>
    
/// <param name="Fields">要导出的字段</param>
    
/// <param name="HeadName">字段对应显示的名称</param>
    public static void ExportToExcel(IList dataList, string[] fields, string[] headTexts)
    {
      ExportToExcel(dataList, fields, headTexts, 
string.Empty);
    }

   
/// <summary>
   
/// 设置样式
   
/// </summary>
   
/// <param name="gvw"></param>
    private static void SetStype(GridView gvw)
    {
      gvw.Font.Name 
= "Verdana";
      gvw.BorderStyle 
= System.Web.UI.WebControls.BorderStyle.Solid;
      gvw.HeaderStyle.BackColor 
= System.Drawing.Color.LightCyan;
      gvw.HeaderStyle.ForeColor 
= System.Drawing.Color.Black;
      gvw.HeaderStyle.HorizontalAlign 
= System.Web.UI.WebControls.HorizontalAlign.Center;
      gvw.HeaderStyle.Wrap 
= false;
      gvw.HeaderStyle.Font.Bold 
= true;
      gvw.HeaderStyle.Font.Size 
= 10;
      gvw.RowStyle.Font.Size 
= 10;
    }
    
/// <summary>
    
/// 导出GridView中的数据到Excel
    
/// </summary>
    
/// <param name="gvw"></param>
    
/// <param name="DataList"></param>
    private static void ExportToExcel(GridView gvw,string title)
    {
      
string fileName;
      HttpContext.Current.Response.Buffer 
= true;
      HttpContext.Current.Response.ClearContent();
      HttpContext.Current.Response.ClearHeaders();
      fileName 
= string.Format("Export-File {0:yyyy-MM-dd_HH_mm}.xls", DateTime.Now);
      HttpContext.Current.Response.AppendHeader(
"Content-Disposition""attachment;filename=" + fileName);
      HttpContext.Current.Response.ContentType 
= "application/vnd.ms-excel";
      StringWriter tw 
= new System.IO.StringWriter();
      HtmlTextWriter hw 
= new System.Web.UI.HtmlTextWriter(tw);
      gvw.RenderControl(hw);
      
if (!string.IsNullOrEmpty(title))
      {
        HttpContext.Current.Response.Write(
"<b><center><font size=3 face=Verdana color=#0000FF>" +title +"</font></center></b>");
      }
      HttpContext.Current.Response.Write(tw.ToString());
      HttpContext.Current.Response.Flush();
      HttpContext.Current.Response.Close();
      HttpContext.Current.Response.End();

      gvw.Dispose();
      tw.Dispose();
      hw.Dispose();
      
      gvw 
= null;
      tw 
= null;
      hw 
= null;

    }
    

  }

List <Order> orders=this. GetOrders()
ExportHelper.ExportToExcel(orders, 
                                 
new string[] { "OrderNo""CustomerNo""UserNo""ModelNo","Quantity","Price","Amount","OrderDate" },
                                 
new string[] { "订单","客户代码","用户代码","型号","数量","价格","金额","订货日期"});
    }
欢迎大家指点跟好的办法。
 
http://www.cnblogs.com/zhang3533/archive/2008/10/21/1316050.html
阅读更多
个人分类: ASP.Net
想对作者说点什么? 我来说一句

Asp.net导出到excel

2010年04月11日 926B 下载

没有更多推荐了,返回首页

不良信息举报

asp.net导出到Excel的最佳选择

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭