一、Excel导出帮助类,要安装包NPOI

 1 using NPOI.HSSF.UserModel;
2 using NPOI.SS.UserModel;
3 using System;
4 using System.Collections.Generic;
5 using System.Data;
6 using System.IO;
7
8 namespace JMB.Common.LogicTools
9 {
10 /// <summary>
11 /// Excel导入导出组件
12 /// </summary>
13 public static class ExportHelper
14 {
15 /// <summary>
16 /// 导出数据到Excel
17 /// </summary>
18 /// <param name="SourceTable"></param>
19 /// <returns></returns>
20 public static Stream RenderDataTableToExcel(DataTable SourceTable)
21 {
22 HSSFWorkbook workbook = new HSSFWorkbook();
23 MemoryStream ms = new MemoryStream();
24 HSSFSheet sheet = workbook.CreateSheet() as HSSFSheet;
25 HSSFRow headerRow = sheet.CreateRow(0) as HSSFRow;
26
27 // handling header.
28 foreach (DataColumn column in SourceTable.Columns)
29 headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);
30
31 // handling value.
32 int rowIndex = 1;
33
34 foreach (DataRow row in SourceTable.Rows)
35 {
36 HSSFRow dataRow = sheet.CreateRow(rowIndex) as HSSFRow;
37
38 foreach (DataColumn column in SourceTable.Columns)
39 {
40 dataRow.CreateCell(column.Ordinal).SetCellValue(row[column].ToString());
41 }
42
43 rowIndex++;
44 }
45
46 workbook.Write(ms);
47 ms.Flush();
48 ms.Position = 0;
49
50 sheet = null;
51 headerRow = null;
52 workbook = null;
53
54 return ms;
55 }
56 }
57 }

二、写一个把List集合转成DataTable的帮助类

 1 public class User
2 {
3 /// <summary>
4 /// 用户名
5 /// </summary>
6 public string UserName { get; set; }
7 /// <summary>
8 /// 邮箱
9 /// </summary>
10 public string Email { get; set; }
11 /// <summary>
12 /// 密码
13 /// </summary>
14 public string PassWord { get; set; }
15 }
16 public static class ListToDataTable
17 {
18 public static DataTable GetDataTable(List<User> list)
19 {
20 DataTable dt = new DataTable();
21 dt.Columns.Add("列1名称", typeof(string));//用户名
22 dt.Columns.Add("列2名称", typeof(string));//密码
23 dt.Columns.Add("列3名称", typeof(string));//邮箱
24 //加载明细
25 dt.Clear();
26 #region 加载数据
27 foreach (var item in list)
28 {
29 DataRow dr = dt.NewRow();
30 dr[0] = item.UserName;
31 dr[1] = item.PassWord;
32 dr[2] = item.Email;
33 dt.Rows.Add(dr);
34 }
35
36 #endregion
37 return dt;
38 }
39
40 }

三、在页面上点击导出Excel的按钮 控制器类中的某个Action

 1   [HttpGet]
2 public ActionResult List()
3 {
4 return View();
5 }
6
7 [HttpPost]
8 public ActionResult List(FormCollection Form)
9 {
10 string datatoexcel = Form["getexcel"].ToString();
11 if (datatoexcel == "a1")
12 {
13 List<User> list = new List<User>();
14 list.Add(new User { UserName = "张三", Email = "1s45@qq.com", PassWord = "123" });
15 list.Add(new User { UserName = "李四", Email = "14s5@qq.com", PassWord = "587" });
16 list.Add(new User { UserName = "王五", Email = "1s45@qq.com", PassWord = "12s" });
17 list.Add(new User { UserName = "麻子", Email = "145@qq.com", PassWord = "ss" });
18 DataTable dt = ListToDataTable.GetDataTable(list);
19
20 using (MemoryStream ms = ExportHelper.RenderDataTableToExcel(dt) as MemoryStream)
21 {
22 /*输出文件流,浏览器自动提示下载*/
23 string filename = "你要取的文件名" + ".xls";
24 Response.AddHeader("Content-Disposition", string.Format("attachment; filename=" + filename));
25 Response.BinaryWrite(ms.ToArray());
26 }
27 }
28 return View();
29 }

四、前端页面示意

 1 <html>
2 <script src="~/Content/js/jquery-1.11.1.js"></script>
3 <script type="text/javascript">
4 //导出数据到excel
5 function doGetExcel() {
6
7 var getexcelinput = document.createElement("input");
8 getexcelinput.type = "hidden";
9 getexcelinput.name = "getexcel";
10 getexcelinput.value = "1";
11 var form = document.getElementById('pageform');
12 form.appendChild(getexcelinput);
13 form.submit();
14 form.removeChild(getexcelinput);
15 }
16 </script>
17
18 <body>
19 <div class="session">
20 <div class="wrap-shadow">
21 <div class="session-content-padding">
22 <form id="pageform" method="post" action="/Action/List">
23 <div class="info-bar">
24 <div class="info-bar-btn-group">
25 <a class="info-bar-btn" onclick="doGetExcel();">导出Excel文件</a>
26 </div>
27 <div class="info-bar-content">
28 </div>
29 </div>
30
31
32 </form>
33 </div>
34 </div>
35 </div>
36
37 </body>
38 </html>
39

Asp.Net MVC中点击按钮导出Excel的更多相关文章

  1. ASP.Net MVC中数据库数据导出Excel,供HTTP下载(转)

    转自http://www.cnblogs.com/hipo/archive/2012/03/13/2394019.html 一.关于下载 一般对下载权限有没有限制,或安全性要求不高的情况下,基于web ...

  2. ASP.Net MVC中数据库数据导出Excel,供HTTP下载

    本文来自:http://www.cnblogs.com/hipo/archive/2012/03/13/2394019.html 一.关于下载 一般对下载权限有没有限制,或安全性要求不高的情况下,基于 ...

  3. 转:ASP.NET MVC 将IList<T>导出Excel文档的泛型类

    /// <summary> /// 提供将泛型集合数据导出Excel文档. /// </summary> /// <typeparam name="T" ...

  4. ASP.Net MVC利用NPOI导入导出Excel

    因近期项目遇到所以记录一下: 首先导出Excel: 首先引用NPOI包 http://pan.baidu.com/s/1i3Fosux (Action一定要用FileResult) /// <s ...

  5. asp.net mvc 中使用NPOI导出excel

    版本信息:NPOI1.2.5(2.0以上的版本很多方法不清楚) 明确三点: path: mvc 部署网站的时候,我们肯定要拷贝的一个文件夹就mvc的UI层,有点可以肯定的是,你部署网站的路径不一定都是 ...

  6. asp.net mvc 使用NPOI插件导出excel

    /// <summary> /// 交易账单 导出交易列表 /// </summary> /// <returns></returns> public ...

  7. ASP.net MVC把Html Table导出Excel

    [HttpPost] public ActionResult ExportExcel(FormCollection form) { string strHtml = form["hHtml& ...

  8. 1.ASP.NET MVC使用EPPlus,导出数据到Excel中

    好久没写博客了,今天特地来更新一下,今天我们要学习的是如何导出数据到Excel文件中,这里我使用的是免费开源的Epplus组件. 源代码下载:https://github.com/caofangshe ...

  9. .net mvc利用NPOI导入导出excel

    1.导出Excel :首先引用NPOI包(Action一定要用FileResult) /// <summary> /// 批量导出需要导出的列表 /// </summary> ...

  10. 【asp.net】将GridView数据导出Excel

    概要: 中午睡了一会,醒来的时候看到老师叫我去办公室,需求是这样的,把excel表中的每个同学,判断图片目录中是否有对应的照片(图片的名字用的学号或身份证号码) 没有对应图片的学生记录,存入自己的数据 ...

随机推荐

  1. A/B 实验避坑指南:为什么不建议开 AABB 实验

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 本文将针对日常开设 A/B 实验过程中一个不太合理的使用方法--AABB 实验进行详细的解释,告诉大家为什么不建议 ...

  2. Office 看不了激活更改产品密钥

    Office 看不了激活更改产品密钥 解决方案: PatchOffice.rar - 蓝奏云 将文件解压到桌面 >>> 右击,以管理员方式运行或双击运行均可 >>> ...

  3. compilation.templatesPlugin is not a function

    ERROR Failed to compile with 1 error TypeError: compilation.templatesPlugin is not a function - SetV ...

  4. 如何在 EF Core 中使用乐观并发控制

    什么是乐观并发控制? 乐观并发控制是一种处理并发访问的数据的方法,它基于一种乐观的假设,即认为并发访问的数据冲突的概率很低.在乐观并发控制中,系统不会立即对并发访问的数据进行加锁,而是在数据被修改时, ...

  5. 【每日一题】35. [CQOI2009]中位数图 (前缀和,贡献值计算)

    补题链接:Here 算法涉及:前缀和,贡献值计算 经典中位数计数问题,记得以前百度之星也出过类似的题,这道题有一个限定范围是要奇数区间的 我们很容易想到,奇数下标到偶数下标或者偶数下标到奇数下标的长度 ...

  6. 重磅发布丨从云原生到 Serverless,先行一步看见更大的技术想象力

    (2022 云原生实战峰会) 2022年12月28日,以"原生万物 云上创新"为主题的第三届云原生实战峰会在线上举行. 会上,阿里云提出激活企业应用构建三大范式,并发布云原生可观测 ...

  7. [QML]从零开始QML开发(二)QML开发,浅谈控件、槽函数、锚等基本概念。QML和C++怎么交互?贯彻落实MVC原则

    [QML]从零开始QML开发(二)QML开发,浅谈控件.槽函数.锚等基本概念.QML和C++怎么交互?贯彻落实MVC原则 先看代码: import QtQuick 2.12 import QtQuic ...

  8. P1616-DP【橙】

    这道题好几天前就写出了记搜代码,但是理论上空间恰好够,实际上不论是用new-delete还是malloc-free,都有1~2个点MLE了(最抽象的是一开始MLE两个点,我把数组两个下标调换顺序后理应 ...

  9. 我发现明显产品bug啦

    1.  百度云在下载时,如果选中的文件过多,在点击下载后,不能即时取消所有的下载项! 如下图,点击""全部取消" 出现在列表中项全部消失,但后续新的项继续出现,仍在下载, ...

  10. channel 是怎么走上死锁这条路的

    本篇文章接着 hello world 的并发实现一文介绍 Go 的 channel 类型,同时进一步介绍 channel 的几种死锁情况,这些都是代码中很容易遇到的,要重点摘出来讲,防止一不留神程序就 ...