共享一个MVC4通过NPOI导出excel的通用方法

  1 public static System.IO.MemoryStream ExportExcel<T>(string title, List<T> objList, params string[] excelPropertyNames)
  2 {
  3     NPOI.SS.UserModel.IWorkbook workbook = new NPOI.HSSF.UserModel.HSSFWorkbook();
  4     NPOI.SS.UserModel.ISheet sheet = workbook.CreateSheet("Sheet1");
  5     NPOI.SS.UserModel.IRow row;
  6     NPOI.SS.UserModel.ICell cell;
  7     NPOI.SS.UserModel.ICellStyle cellStyle;
  8
  9     int rowNum = 0;
 10     if (!string.IsNullOrEmpty(title))
 11     {
 12         #region 标题
 13         #region 标题样式
 14         cellStyle = workbook.CreateCellStyle();
 15         cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
 16         cellStyle.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;//垂直居中有问题
 17         NPOI.SS.UserModel.IFont font = workbook.CreateFont();
 18         font.FontHeightInPoints = 15;
 19         cellStyle.SetFont(font);
 20         #endregion
 21         row = sheet.CreateRow(rowNum);
 22         cell = row.CreateCell(0, NPOI.SS.UserModel.CellType.String);
 23         cell.SetCellValue(title);
 24         cell.CellStyle = cellStyle;
 25         sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, excelPropertyNames.Length > 0 ? excelPropertyNames.Length - 1 : 0));
 26         rowNum++;
 27         #endregion
 28     }
 29
 30     if (objList.Count > 0)
 31     {
 32         Type type = objList[0].GetType();
 33         if (type != null)
 34         {
 35             System.Reflection.PropertyInfo[] properties = type.GetProperties();
 36             if (properties.Length > 0)
 37             {
 38                 #region 表头
 39                 #region 表头样式
 40                 cellStyle = workbook.CreateCellStyle();
 41                 cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
 42                 #endregion
 43                 if (excelPropertyNames.Length > 0)
 44                 {
 45                     row = sheet.CreateRow(rowNum);
 46                     int count = 0;
 47                     for (int m = 0; m < properties.Length; m++)
 48                     {
 49                         if (excelPropertyNames.Contains(properties[m].Name))
 50                         {
 51                             cell = row.CreateCell(count, NPOI.SS.UserModel.CellType.String);
 52                             string displayName = GetDisplayNameByPropertyName(properties[m].Name);
 53                             cell.SetCellValue(displayName == null ? "" : displayName);
 54                             cell.CellStyle = cellStyle;
 55                             count++;
 56                         }
 57                     }
 58                     rowNum++;
 59                 }
 60                 #endregion
 61
 62                 #region 表体
 63                 if (excelPropertyNames.Length > 0)
 64                 {
 65                     for (int i = 0; i < objList.Count; i++)
 66                     {
 67                         row = sheet.CreateRow(i + rowNum);
 68                         int count = 0;
 69                         for (int j = 0; j < properties.Length; j++)
 70                         {
 71                             if (excelPropertyNames.Contains(properties[j].Name))
 72                             {
 73                                 cell = row.CreateCell(count);
 74                                 object obj = properties[j].GetValue(objList[i]);
 75                                 cell.SetCellValue(obj == null ? "" : obj.ToString());
 76                                 cell.CellStyle = cellStyle;
 77                                 count++;
 78                             }
 79                         }
 80                     }
 81                 }
 82                 #endregion
 83             }
 84         }
 85     }
 86     System.IO.MemoryStream ms = new System.IO.MemoryStream();
 87     workbook.Write(ms);
 88     return ms;
 89 }
 90
 91 public static string GetDisplayNameByPropertyName(string propertyName)
 92 {
 93     string result = null;
 94     foreach (KeyValuePair<string,string> dic in NameDictionary())
 95     {
 96         if (dic.Key == propertyName)
 97         {
 98             result = dic.Value;
 99         }
100         continue;
101     }
102     return result;
103 }
104
105 public static Dictionary<string, string> NameDictionary()
106 {
107     Dictionary<string, string> dic = new Dictionary<string, string>();
108     dic.Add("AdminID", "编号");
109
110     dic.Add("AdminName", "用户名");
111
112     dic.Add("AdminMobile", "手机号");
113
114     dic.Add("RealName", "真实姓名");
115
116     return dic;
117 }

调用很简单

 1 public ActionResult Test()
 2 {
 3     int totalCount;
 4     List<AdminModel> adminModelList = adminBLL.GetPageList(1, 10, out totalCount);
 5     if (adminModelList == null)
 6     {
 7         adminModelList = new List<AdminModel>();
 8     }
 9     return File(ExcelHelper.ExportExcel<AdminModel>("表头", adminModelList, "AdminID", "AdminName", "AdminMobile", "RealName").ToArray(), "application/vnd.ms-excel", "工作簿.xls");
10 }

共享一个MVC4通过NPOI导出excel的通用方法

时间: 2024-12-18 10:37:54

共享一个MVC4通过NPOI导出excel的通用方法的相关文章

mvc4 用NPOI导出Excel

第一次做数据导出Excel,刚看到这个的时候,首先想到的就是新建一个excel的文件,然后将它下载,后来询问别人,他们都推荐使用NPOI,发现这个很好用,就用博客记录一下 1.引用NPOI包 2.导出Excel /// <summary> /// 导出Excel /// </summary> /// <param name="collection"></param> /// <returns></returns>

分享使用NPOI导出Excel树状结构的数据,如部门用户菜单权限

大家都知道使用NPOI导出Excel格式数据 很简单,网上一搜,到处都有示例代码. 因为工作的关系,经常会有处理各种数据库数据的场景,其中处理Excel 数据导出,以备客户人员确认数据,场景很常见. 一个系统开发出来,系统要运行起来,很多数据要初始化,这个时候也是需要客户提供各种业务的基础数据.客户提供的数据中,其中除了word.pdf,最常见的就是Excel. 废话不多说,直接上图上代码: 如图, 左侧三列,作为 一个系统 所有菜单的树状结构. 其他列 以用户的信息(如用户名.登录名) 作为表

.NET NPOI导出Excel详解

NPOI,顾名思义,就是POI的.NET版本.那POI又是什么呢?POI是一套用Java写成的库,能够帮助开发者在没有安装微软Office的情况下读写Office的文件. 支持的文件格式包括xls, doc, ppt等. 官方网站:http://npoi.codeplex.com/ nuget直接获取使用 一.NPOI生成Excel //创建工作薄 var workbook = new HSSFWorkbook(); //创建表 var table = workbook.CreateSheet(

Asp.Net 使用Npoi导出Excel

引言 使用Npoi导出Excel 服务器可以不装任何office组件,昨天在做一个导出时用到Npoi导出Excel,而且所导Excel也符合规范,打开时不会有任何文件损坏之类的提示.但是在做导入时还是使用OleDb的方式,这种方式的导入在服务器端似乎还是需要装office组件的,有没有不需要装组件并且能照常导入的呢? Npoi导出/下载Excel public void NpoiExcel(DataTable dt, string title) { NPOI.HSSF.UserModel.HSS

NPOI导出Excel - 自动适应中文宽度(帮助类下载)

前言 做了好几个Excel.Word导出,用了HTTP流导出伪Excel文件.用过Office组件(这东西在生产环境下相当麻烦,各种权限,**). 最后决定使用NPOI组件来导出,好处很多很多了,这里不多说. 这篇文章呢,主要说一下Excel导出的细节以及问题. 我在制作这个Demo的时候使用的环境: Visual Studio 2010.Office 2013 .Framework .NET 3.5 .NPOI 1.2.5(至于为什么没有选最新版 稍后说) 完成后的截图 从浏览器导出的Exce

NPOI导出Excel(含有超过65335的处理情况)

NPOI导出excel的网上有很多,正好自己遇到了学习并且记录一下: 首先说明几点: 1.Excel2003及一下:后缀xls,单个sheet最大行数为65335 Excel2007 单个sheet :后缀xlsx 单个sheet 最大行数为 1048576 2.在用NPOI.dll时,导出的excel两种形式(xls,xlsx)用到的组件不一样,xls是HSSF,xlsx是XSSF, 由于某种原因我选择的是HSSF组件的: 以linq 匿名类得到数据为数据源导出Excel 类如这样的: var

NPOI 导出 excel 性能测试

NPOI 导出 excel 性能测试 Intro 网上看到很多人说 NPOI 的性能不行,自己写了一个 NPOI 的扩展库,于是想尝试看看 NPOI 的性能究竟怎么样,道听途说始终不如自己动手一试. 测试环境 测试工具: BenchmarkDotNet v0.11.5 EPPlus.Core.Extensions v2.3.2 EPPlus v4.5.3.1 测试代码:(Github 源码) [SimpleJob(launchCount: 1, warmupCount: 1, targetCou

NPOI导出excel(带图片)

近期项目中用到Excel导出功能,之前都是用普通的office组件导出的方法,今天尝试用下NPOI,故作此文以备日后查阅. 1.NPOI官网http://npoi.codeplex.com/,下载最新工具包. 2.选择.net版本(例如dotnet4),引用其中的dll. 3.后台代码 using System; using System.Web; using System.Data; using System.Configuration; using System.IO; using Test

NPOI导出EXCEL 打印设置分页及打印标题

在用NPOI导出EXCEL的时候设置分页,在网上有查到用sheet1.SetRowBreak(i)方法,但一直都没有起到作用.经过研究是要设置  sheet1.FitToPage = false; 而这个属性默认是true的,怪不得一直设置都不起作用. 设置打印标题用 hssfworkbook.SetRepeatingRowsAndColumns(0, 0, 5, 0, 5); 但最新版本已经有新的方法了. Sheet sheet1 = hssfworkbook.CreateSheet("She