使用NPOI实现简单的Excel导出功能
【1】NPOI
NPOI.dll
NPOI.POIFS.dll
NPOI.HSSF.dll
NPOI.Util.dll
蓝后,贴一个帮助类,包含List转换成DataTable方法以及将DataTable导出到Excel表格的方法:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel; namespace NPOIExportDemo.Utility
{
/// <summary>实体转换辅助类</summary>
public class EntityConvertHelper<T> where T : class, new()
{
/// <summary>List转换成DataTable, 主键为自增长</summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="value">List</param>
/// <returns>DataTable</returns>
public static DataTable ConvertToDataTable(List<T> value)
{
var properties = TypeDescriptor.GetProperties(typeof(T));
var dataTable = new DataTable();
for (var i = ; i < properties.Count; i++)
{
var property = properties[i];
dataTable.Columns.Add(property.Name, property.PropertyType);
}
var data = new object[properties.Count];
value.ForEach(x =>
{
for (var i = ; i < data.Length; i++)
{
data[i] = properties[i].GetValue(x);
}
dataTable.Rows.Add(data);
});
//移除PkValue列
if (dataTable.Columns.Contains("PkValue"))
{
dataTable.Columns.Remove("PkValue");
}
return dataTable;
} /// <summary>导出</summary>
/// <param name="list">List数据</param>
/// <param name="columnAndName">要导出的列名和表头名称字典(Key:列名,Value:表头名称)</param>
/// <returns>结果(使用时记得回收)</returns>
public static IWorkbook Export(List<T> list, Dictionary<string, string> columnAndName)
{
if (list == null || list.Count.Equals()) return null;
DataTable table = ConvertToDataTable(list);
var columnList = (from DataColumn column in table.Columns select column.ColumnName).ToList();
var keyList = columnAndName.Keys.ToList();
var outColumnList = keyList.Where(x => !columnList.Contains(x)).ToList();
if (outColumnList.Count > )
{
throw new Exception("要导出的列名和表头名称字典包含DataTable所没有的列名");
}
IWorkbook workbook = new XSSFWorkbook();
ISheet sheet = workbook.CreateSheet();
IRow headerRow = sheet.CreateRow();
List<string> headerTitle = columnAndName.Values.ToList();
for (int index = ; index < headerTitle.Count; index++)
{
headerRow.CreateCell(index).SetCellValue(headerTitle[index]);
}
int rowIndex = ;
foreach (DataRow row in table.Rows)
{
IRow dataRow = sheet.CreateRow(rowIndex);
List<string> clounmContentList = new List<string>();
foreach (var key in keyList)
{
clounmContentList.Add(row[key].ToString());
}
for (int index = ; index < clounmContentList.Count; index++)
{
dataRow.CreateCell(index).SetCellValue(clounmContentList[index]);
}
rowIndex++;
}
return workbook;
}
}
}
EntityConvertHelper.cs
紧接着,我们就要在controller里面去调用它们啦~
using NPOIExportDemo.Utility;
using System;
using System.Collections.Generic;
using System.IO;
using System.Web;
using System.Web.Mvc; namespace NPOIExportDemo.Controllers
{
public class NPOIDemoController : Controller
{
// GET: NPOIDemo
public ActionResult Index()
{
return View();
} public void Export()
{
List<Info> infos = new List<Info>()
{
new Info {Name = "Tomcat", Age = , Time = "2017-08-03 10:34:37"},
new Info {Name = "Jerry", Age = , Time = "2017-08-03 10:34:37"},
new Info {Name = "Mike", Age = , Time = "2017-08-03 10:34:37"},
new Info {Name = "J.M", Age = , Time = "2017-08-03 10:34:37"},
new Info {Name = "aaa", Age = , Time = "2017-08-03 10:34:37"}
};
Dictionary<string, string> dic = new Dictionary<string, string>()
{
{"Name", "姓名"},
{"Age", "年龄"},
{"Time", "时间"}
};
try
{
using (MemoryStream ms = new MemoryStream())
{
var workBook = EntityConvertHelper<Info>.Export(infos, dic);
workBook.Write(ms);
string filename = "报表导出" + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss") + ".xlsx";
if (Request.Browser.Browser == "IE")
filename = HttpUtility.UrlEncode(filename);
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment;fileName=" + filename);
Response.BinaryWrite(ms.ToArray());
Response.End();
}
}
catch (Exception e)
{
}
}
} public class Info
{
public string Name { get; set; }
public int Age { get; set; }
public string Time { get; set; }
}
}
NPOIDemoController.cs
最后94页面啦~
<script src="~/scripts/jquery-1.12.3.js"></script> <form action="/NPOIDemo/Export" method="post" id="exportform">
<button type="submit">导出</button>
</form>
Index.cshtml
这个就很单纯的使用了一个form表单提交形式的按钮,其他应该也是可以的~
我的代码分享差不多就是这样,当然最牛的帮助类的代码都是前辈们提供给我的,在此向他们献上我的膝盖(扑通~)。
如果大家有什么疑问可以留言问我,或者觉得好用的话给点个赞,我好向亲爱的前辈们有个交代~
/****************************我是可爱的分割线*********************************/

使用NPOI实现简单的Excel导出功能的更多相关文章
- excel导出功能优化
先说说优化前,怎么做EXCEL导出功能的: 1. 先定义一个VO类,类中的字段按照EXCEL的顺序定义,并且该类只能用于EXCEL导出使用,不能随便修改. 2. 将查询到的结果集循环写入到这个VO类中 ...
- excel导出功能原型
本篇博客是记录自己实现的excel导出功能原型,下面我将简单介绍本原型: 这是我自制的窗体,有一个ListView和一个Button(导出)控件. 这是我在网上找到了使用exel需要引用的库. usi ...
- Atitit.excel导出 功能解决方案 php java C#.net版总集合.doc
Atitit.excel导出 功能解决方案 php java C#.net版总集合.docx 1.1. Excel的保存格式office2003 office2007/2010格式1 1.2. 类库选 ...
- 用SpringMvc实现Excel导出功能
以前只知道用poi导出Excel,最近用了SpringMvc的Excel导出功能,结合jxl和poi实现,的确比只用Poi好,两种实现方式如下: 一.结合jxl实现: 1.引入jxl的所需jar包: ...
- 利用Aspose.Cells完成easyUI中DataGrid数据的Excel导出功能
我准备在项目中实现该功能之前,google发现大部分代码都是利用一般处理程序HttpHandler实现的服务器端数据的Excel导出,但是这样存在的问题是ashx读取的数据一般都是数据库中视图的数据, ...
- java利用EasyPoi实现Excel导出功能
easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 语言( ...
- asp.net excel导出功能
以下是我在项目开发中所做的关于Excel导出功能,不足之处还望大家指正,相互学习 protected void btn_Export_Click(object sender, EventArgs e) ...
- Delphi实现带有格式的Excel导出功能
功能预览 运行预览 模板样式 存储返参 导出的Excel 2. 代码实现 //执行sql的函数 procedure TForm1.GetReportData(astrsql:string); var ...
- 使用NPOI组件完成的Excel导出导入(附源代码,测试通过)
最近遇到一个Excel导入导出的问题,要支持winform和webform,这里我是一个认真严谨的coder,所以决定把这个记录下来!和大家一起分享一下!如果需要的同学可以下载哦! 对于NPOI这个组 ...
随机推荐
- 分块编码(Transfer-Encoding: chunked)VS Content-length
参考链接: HTTP 协议中的 Transfer-Encoding 分块传输编码 https://www.cnblogs.com/xuehaoyue/p/6639029.html 一.背景: 持续连接 ...
- 怎么从传统的盒子思想转为Flex 布局(css)
前端进化很快,总是有新的技术出来,开始可能有些人用惯了盒子模型的思想 依赖 display属性 + position属性 + float属性.这三大件.它对于那些特殊布局非常不方便 我们就来看看Fle ...
- Java设计模式之JDK动态代理原理
动态代理核心源码实现public Object getProxy() { //jdk 动态代理的使用方式 return Proxy.newProxyInstance( this.getClass(). ...
- 莫烦大大keras的Mnist手写识别(5)----自编码
一.步骤: 导入包和读取数据 数据预处理 编码层和解码层的建立 + 构建模型 编译模型 训练模型 测试模型[只用编码层来画图] 二.代码: 1.导入包和读取数据 #导入相关的包 import nump ...
- POJ 1979 Red and Black (BFS)
链接 : Here! 思路 : 简单的搜索, 直接广搜就ok了. /****************************************************************** ...
- 实验吧writeup
后台登录 1.看源码有这样一段php代码<!-- $password=$_POST['password']; $sql = "SELECT * FROM admin WHERE use ...
- 设置随机 User-Agent
本文转载自以下网站: Scrapy 中设置随机 User-Agent 的方法汇总 https://www.makcyun.top/web_scraping_withpython14.html 一行代码 ...
- sql server备份策略
https://www.cnblogs.com/fengzongming/archive/2018/08/29/9530616.html
- Django链接Mysql 8.0 出现错误(1045:Access denied for user 'root'@'localhost' (using password: NO) 的一种解决方法
运行环境: Django版本2.0 ; Mysql 版本 8.0.11; 错误代码: django.db.utils.OperationalError: (1045:Access denied fo ...
- 0208MySQL5.7之Group Replication
转自http://blog.itpub.net/29510932/viewspace-2055679/ MySQL Group Replication: Hello World! 对测试版(on la ...