zoukankan      html  css  js  c++  java
  • .net生成Excel,并下载

    生成Excel的方式有很多种,这里记录两个最简单的:

    1.将数据保存为html,然后输出到客户端,保存为Excel文件;

    2.通过 生成字符串,然后输出到客户端,保存为Excel。

    以上两者的原理都是一致的,只是生成的字符串长相不一致而已。我这里使用的是mvc,所以要下载的话,直接生成一个超链接指向当前这个生成文件的Action,用Ajax好像没办法,但是如果当前这个超链接只是请求一个文件,页面也不会刷新,比如一个按钮点击事件:直接windows.location.href="/control/action",如此就可以直接下载,当前页面也不会刷新。

    先上共有的代码:

    HttpResponseBase resp= HttpContext.Response;
    resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");//设置编码格式,防止中文乱码
    resp.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode("月报表.xls",Encoding.UTF8));//解决生成的文件名中文乱码
    resp.ContentType = "application/ms-excel";

    然后是生成数据的过程,这里就分为两种:

    1.生成table的html

    这里需要获取数据库的数据,然后按自己要的格式生成table,可以对table设置样式之类的,所有对table设置的样式,将会影响生成的Excel,同样可以给table加表头,当然table外面要不要加那些<html>、<body>这些,都不重要,可加可不加,示例如下:

    <table border='1'>//设置border=1则生成的表格会有黑色表框
      <tr>
          <td>1</td><td>2</td><td>3</td><td>4</td>
      </tr>
    </table>

    2.通过 控制Excel样式

    在这里,每加一个 就会生成Excel中的一格,每加一个 就会换行,这就是原理,所以大家可以拿到数据之后,对数据列表循环,每个数据item是一行

    每列数据对应插入到Excel中的一格,示例如下:

    foreach (var item in list)
    {
        ls_item += item.agentName + "	";
        ls_item += item.tourNo + "	"; 
        ls_item += item.travelerName + "	";
        ls_item += item.checkinDate + "	";
        ls_item += item.checkoutDate + "	";
        ls_item += item.rooms + "	";
        ls_item += item.nights + "	";
        ls_item += item.RoomPrice + "	";
        ls_item += item.minorTotal + "	
    ";//最后加个
    换行
    }

    以上代码为数据填充的部分,接下来就是将数据输出到客户端,只要两句话:

    resp.Write(内容的字符串);
    resp.End();

    以上就是生成Excel的方法,当然这里是直接输出到客户端,所以没有生成多余的文件在服务器,如果非要生成文件在服务器,然后提供链接给客户端下载,其实就是将数据用文件流输出,保存为文件,然后将生成的文件路径返回给客户端,然后让客户端来请求这个文件路径,就能够下载了,示例如下:

       StreamWriter sw = new StreamWriter(path, false, Encoding.GetEncoding("gb2312"));
       sw.Write(str);//保存文件
       sw.Close();
       return Content("../DownLoad/file.xls");//不要忘了后缀.xls

    生成word文件,方法也是一样的,只是有某些小地方需要修改:

    resp.AppendHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode("file.doc", Encoding.UTF8));//后缀为doc
    resp.ContentType = "application/msword";//文件内容为msword

    其他都一致了。

    当然生成这些文件的方法还有很多种,这里说的应该是最简单的一种。

  • 相关阅读:
    Redis知识点
    MySQL InnoDB存储引擎知识点
    Java BIO、NIO 背后的理论知识
    分布式锁 & 分布式事务
    Kafka监控与JMX
    集合类源码(八)Collection之Set(HashSet, LinkedHashSet, TreeSet,ConcurrentSkipListSet)
    Kafka 基础知识
    JDK SPI 、Spring SPI、Dubbo SPI机制
    给老子爬爬爬!2019国家统计局最新城乡划分代码
    Linux系统使用教程
  • 原文地址:https://www.cnblogs.com/LJP-JumpAndFly/p/4191116.html
Copyright © 2011-2022 走看看