参考:

http://blog.csdn.net/zhouqinghe24/article/details/8649346 参考下载
http://www.cnblogs.com/dyllove98/archive/2013/08/06/3241515.html 参考多个sheet
http://www.cnblogs.com/jicheng/p/5961257.html 参考列表写入

1、nuget搜索安装Npoi

2、代码

  public class UserInfo
{
public string Name { get; set; }
public string Id { get; set; }
public string Phone { get; set; }
} /// <summary>
/// 生成excel文件到内存中
/// </summary>
/// <returns></returns>
public void CreateExcel()
{
MemoryStream ms = new MemoryStream(); List<UserInfo> listUser = new List<UserInfo>()
{
new UserInfo { Name="1", Id="1", Phone="1r" },
new UserInfo { Name="2", Id="2", Phone="2r" },
new UserInfo { Name="3", Id="3", Phone="3r" },
new UserInfo { Name="4", Id="4", Phone="4r" },
new UserInfo { Name="5", Id="5", Phone="5r" },
}; //创建工作簿对象
var workbook = new HSSFWorkbook(); #region DataTable数据
//创建工作表
ISheet sheet = workbook.CreateSheet("一个sheet");
IRow row0 = sheet.CreateRow(0);
row0.CreateCell(0).SetCellValue("用户Id");
row0.CreateCell(1).SetCellValue("用户名称");
row0.CreateCell(2).SetCellValue("用户备注信息"); var dtSource = GetDataTable();
for (int i = 0; i < dtSource.Rows.Count; i++)
{
row0 = sheet.CreateRow(i + 1);
for (int j = 0; j < dtSource.Columns.Count; j++)
{
row0.CreateCell(j).SetCellValue(dtSource.Rows[i][j].ToString());
}
} #endregion #region list数据
ISheet sheet2 = workbook.CreateSheet("另一个sheet");
IRow row2 = sheet2.CreateRow(0);
row2.CreateCell(0).SetCellValue("用户Id2");
row2.CreateCell(1).SetCellValue("用户名称2");
row2.CreateCell(2).SetCellValue("用户备注信息2"); for (int r = 1; r < listUser.Count; r++)
{
//创建行row
IRow row = sheet2.CreateRow(r);
row.CreateCell(0).SetCellValue(listUser[r].Id);
row.CreateCell(1).SetCellValue(listUser[r].Name);
row.CreateCell(2).SetCellValue(listUser[r].Phone);
} #endregion workbook.Write(ms); ms.Flush();
ms.Position = 0; var fileName = "测试Excel" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx";//xls
DownloadExcel(ms, fileName); } /// <summary>
/// 生成http流下载文件
/// </summary>
/// <param name="ms"></param>
/// <param name="fileName"></param>
private static void DownloadExcel(MemoryStream ms, string fileName)
{
#region 处理IE、火狐等浏览器文件名乱码
if (System.Web.HttpContext.Current.Request.ServerVariables["http_user_agent"].IndexOf("Firefox", StringComparison.Ordinal) != -1)
{
fileName = "=?UTF-8?B?" + Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(fileName)) + "?=";
}
else
{
fileName = System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);
fileName = fileName.Replace("+", "%20");
}
#endregion
System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;fileName=" + fileName);
System.Web.HttpContext.Current.Response.AddHeader("Content-Length", ms.Length.ToString());
System.Web.HttpContext.Current.Response.AddHeader("Content-Transfer-Encoding", "binary");
System.Web.HttpContext.Current.Response.ContentType = "application/octet-stream;charset=utf-8";
System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
System.Web.HttpContext.Current.Response.BinaryWrite(ms.ToArray());
} /// <summary>
/// 模拟DataTable
/// </summary>
/// <returns></returns>
public DataTable GetDataTable()
{
DataTable tblDatas = new DataTable("Datas");
DataColumn dc = null; dc = tblDatas.Columns.Add("Name", Type.GetType("System.String"));
dc = tblDatas.Columns.Add("Id", Type.GetType("System.String"));
dc = tblDatas.Columns.Add("Phone", Type.GetType("System.String")); DataRow newRow;
newRow = tblDatas.NewRow();
newRow["Name"] = "大话西游";
newRow["Id"] = "2.0";
newRow["Phone"] = "我很喜欢";
tblDatas.Rows.Add(newRow); newRow = tblDatas.NewRow();
newRow["Name"] = "梦幻西游";
newRow["Id"] = "3.0";
newRow["Phone"] = "比大话更幼稚";
tblDatas.Rows.Add(newRow); return tblDatas;
}

Npoi List DataTable导出一个Excel多个sheet 下载的更多相关文章

  1. NPOI使用Datatable导出到Excel

    首先要引用dll 下载地址:http://pan.baidu.com/s/1dFr2m 引入命名空间: using NPOI.HSSF.UserModel;using NPOI.SS.UserMode ...

  2. [转].net 使用NPOI或MyXls把DataTable导出到Excel

    本文转自:http://www.cnblogs.com/yongfa365/archive/2010/05/10/NPOI-MyXls-DataTable-To-Excel-From-Excel.ht ...

  3. NPOI通过DataTable导出和读取Excel

    Excel导入及导出问题产生: 从接触.net到现在一直在维护一个DataTable导出到Excel的类,时不时还会维护一个导入类.以下是时不时就会出现的问题: 导出问题: 如果是asp.net,你得 ...

  4. DataTable导出到Excel

    简单的导出到Excel中: 代码如下: using System; using System.Collections.Generic; using System.Data; using System. ...

  5. DataTable 导出到 Excel 类

    底层类: #region DataTable 导出到 Excel /// <summary> /// DataTable 导出到 Excel /// </summary> // ...

  6. c# DataTable导出为excel

    /// <summary> /// 将DataTable导出为Excel文件(.xls) /// </summary> /// <param name="dt& ...

  7. C# datatable 导出到Excel

    datatable导出到Excel /// <summary> /// 将DataTable导出为Excel文件(.xls) /// </summary> /// <pa ...

  8. csv/json/list/datatable导出为excel的通用模块设计

    导出excel的场景我一般都是一个List直接导出成一张sheet,用Npoi.Mapper库很方便,最近我经常是需要将接口返回的jsonarray转成一张excel表,比如从elasticsearc ...

  9. DataTable导出到Excel(.NET 4.0)

    最近在论坛里又看到很多关于DataTable(DataSet)导入Excel的帖子,我也温故知新一下,用VS2010重新整理了一个Sample.这个问题简化一下就是内存数据到文件,也就是遍历赋值,只不 ...

随机推荐

  1. 负载均衡-haproxy安装配置

    HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持 ...

  2. XSS 与 CSRF 两种跨站攻击

    在前几年,大家一般用拼接字符串的方式来构造动态 SQL 语句创建应用,于是 SQL 注入成了很流行的攻击方式, 但是现在参数化查询 已经成了普遍用法,我们已经离 SQL 注入很远了.但是历史同样悠久的 ...

  3. 彻底解密C++宽字符(二)

    彻底解密C++宽字符(二) 转:http://club.topsage.com/thread-2227977-1-1.html 4.利用codecvt和use_facet转换 locale和facet ...

  4. [转]MVC 分页

    本内容代码段抄自传智视频 /// <summary> /// 数据库分页 /// </summary> static List<dynamic> GetPageLi ...

  5. Eclipse中配置Maven build打包

    Eclipse中配置Maven build打包 clean package

  6. SSH&SFTP服务分离+家目录锁定

    Step 1 在root用户下创建维护账号的家目录,此处以创建userftp帐号的家目录为例. mkdir -p /chroot/home/user Step 2 在root用户根目录下执行以下命令设 ...

  7. ES6系列_15之class类的使用

    JS语言的传统方法是通过构造函数,定义并生成新对象,是一种基于原型的面向对象系统.在ES6中新增加了类的概念,可以使用 class 关键字声明一个类,之后以这个类来实例化对象.1.先来看看es5与es ...

  8. leetcode205

    public class Solution { public bool IsIsomorphic(string s, string t) { if (s.Length != t.Length) { r ...

  9. Spring cloud 分布式锁

    https://github.com/easonstudy/springboot_demo study目录中

  10. zookeeper 分布式计数器

    分布式计数器的思路是:指定一个Zookeeper数据节点作为计数器,多个应用实例在分布式锁的控制下,通过更新该数据节点的内容来实现计数功能. Curator中封装了实现,例如 DistributedA ...