前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >.net导出excle无需任何插件,直接通过一个tablehtml实现

.net导出excle无需任何插件,直接通过一个tablehtml实现

作者头像
小小许
发布2018-12-26 14:29:59
5680
发布2018-12-26 14:29:59
举报
文章被收录于专栏:angularejs学习篇

项目背景:

  项目需要导出样式复杂的excl表格,主要是一些样式布局比较复杂

技术分析:

  目前比较通用的实现方式有

    1、借助微软的excle插件

    2、通过NPOI插件实现

    3、直接导出一个html(table),在输出头部指定文件输出类型

  本次主要说的第3中实现方式,这样实现起来很方便,尤其是针对样式复杂的表格,就当写html一样可以实现复杂的显示逻辑

  直接替代吗

后端:采用的一个一般处理程序:

代码语言:javascript
复制
namespace WebApplication3 {
    /// <summary>
    /// DownLoadExcle 的摘要说明
    /// </summary>
    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("<meta http-equiv=\"content-type\" content=\"application/ms-excel; charset=UTF-8\"/>");
            context.Response.Write(this.GetExcleDataHtml());
            context.Response.Flush();
            context.Response.Clear();
            context.Response.End();
        }

        public bool IsReusable {
            get {
                return false;
            }
        }

        /// <summary>
        ///  获取需要导出的数据HTML字符串
        /// </summary>
        /// <returns></returns>
        private string GetExcleDataHtml() {
            StringBuilder sbReport = new StringBuilder();
            sbReport.Append("<table border='1' cellpadding='0' cellspacing='0'>");
            sbReport.Append("<tr>");
            sbReport.Append("<th ><h4>Id</h4></th>");
            sbReport.Append("<th style='width:200px;'><h4>姓名</h4></th>");
            sbReport.Append("<th style='width:100px;'><h4>成绩</h4></th>");
            sbReport.Append("</tr>");

            for (int i = 0; i < 10; i++) {
                sbReport.Append("<tr>");
                sbReport.Append(string.Format("<td>{0}</td>", i + 1));
                sbReport.Append(string.Format("<td>测试{0}</td>", i + 1));
                sbReport.Append(string.Format("<td>{0}</td>", (i + 1) * 10));
                sbReport.Append("</tr>");
            }
            sbReport.Append("</table>");
            return sbReport.ToString();
        }
    }
}

前端代码:直接用的一个a标签,链接到下载的一般处理程序地址即可

代码语言:javascript
复制
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <meta charset="utf-8" />
</head>
<body>
    <a href="DownLoadExcle.ashx">下载文件</a>
</body>
</html>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-12-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档