项目背景:
项目需要导出样式复杂的excl表格,主要是一些样式布局比较复杂
技术分析:
目前比较通用的实现方式有
1、借助微软的excle插件
2、通过NPOI插件实现
3、直接导出一个html(table),在输出头部指定文件输出类型
本次主要说的第3中实现方式,这样实现起来很方便,尤其是针对样式复杂的表格,就当写html一样可以实现复杂的显示逻辑
直接替代吗
后端:采用的一个一般处理程序:
namespace WebApplication3 { ////// DownLoadExcle 的摘要说明 /// public class DownLoadExcle : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ClearHeaders(); context.Response.Clear(); context.Response.AppendHeader("content-disposition", "attachment; filename=" + HttpUtility.UrlEncode(System.DateTime.Now.ToString("yyyyMMddHHmmss")+ ".xls", Encoding.UTF8)); // 在此处放置用户代码以初始化页面 context.Response.ContentType = "application/vnd.ms-excel"; // 从Content-Type header中去除charset设置 context.Response.ContentEncoding = Encoding.UTF8;//.GetEncoding("GB2312") .UTF8;//解决中文乱码之关键 // 关闭 ViewState //EnableViewState = false; // 把HTML写回浏览器 context.Response.Write(" "); context.Response.Write(this.GetExcleDataHtml()); context.Response.Flush(); context.Response.Clear(); context.Response.End(); } public bool IsReusable { get { return false; } } ////// 获取需要导出的数据HTML字符串 /// ///private string GetExcleDataHtml() { StringBuilder sbReport = new StringBuilder(); sbReport.Append("
Id | "); sbReport.Append(" 姓名 | "); sbReport.Append(" 成绩 | "); sbReport.Append("
---|---|---|
{0} | ", i + 1)); sbReport.Append(string.Format("测试{0} | ", i + 1)); sbReport.Append(string.Format("{0} | ", (i + 1) * 10)); sbReport.Append("
前端代码:直接用的一个a标签,链接到下载的一般处理程序地址即可