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

来源:互联网 发布:沈阳北方软件学院 编辑:程序博客网 时间:2024/04/29 09:02

在实际中可能经常要遇到将数据导出到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
原创粉丝点击