Npoi List DataTable导出一个Excel多个sheet 下载
参考:
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; }