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

https://www.cnblogs.com/xiaoXuZhi/p/downloadExcle.html

 

 

项目背景:

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

技术分析:

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

    1、借助微软的excle插件

    2、通过NPOI插件实现

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

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

  直接替代吗

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

  

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

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

");

            sbReport.Append("

");

            sbReport.Append("

");

            sbReport.Append("

");

            sbReport.Append("

");

            sbReport.Append("

");

 

            for (int i = 0; i < 10; i++) {

                sbReport.Append("

");

                sbReport.Append(string.Format("

", i + 1));

                sbReport.Append(string.Format("

", i + 1));

                sbReport.Append(string.Format("

", (i + 1) * 10));

                sbReport.Append("

");

            }

            sbReport.Append("

Id

姓名

成绩

{0} 测试{0} {0}
");

            return sbReport.ToString();

        }

    }

}

  

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

复制代码





    
    


    下载文件

复制代码

你可能感兴趣的:(.net导出excle无需任何插件,直接通过一个tablehtml实现)