日期:2014-05-18  浏览次数:20607 次

急急急!用MVC框架 求一个从数据库导出数据到EXCEL的方法 不要csv格式的
现在公司要做下载数据的功能,求一个可以完整操控Excel的类 或者好的方案,在网上找了好多都不太可行 在线等

------解决方案--------------------


顶顶
------解决方案--------------------
在实际中可能经常要遇到将数据导出到excel中.

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

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


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

 

Code
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>"