zoukankan      html  css  js  c++  java
  • 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;
            }
    

     

  • 相关阅读:
    Node.js/Python爬取网上漫画
    webpack2配置
    Node多进程相关
    文件上传更新服务相关
    自己的php函数库
    记录
    jquery 小知识点
    自己写算法---java的堆的非递归遍历
    转虚函数,写的相当好啊
    公钥私钥 ssl/tsl的概念
  • 原文地址:https://www.cnblogs.com/heifengwll/p/7016032.html
Copyright © 2011-2022 走看看