public static byte[] ExportExcel<T>(Dictionary<string, string> columnsHeader, List<T> dataSource, string title = null, string footer = null)
{
IWorkbook workbook = new HSSFWorkbook();
ISheet sheet = workbook.CreateSheet("Sheet1");
sheet.DefaultColumnWidth = ; IRow row;
ICell cell; #region excel标题头
int rowIndex = ;
if (!string.IsNullOrEmpty(title))
{
ICellStyle cellStyle = workbook.CreateCellStyle();
cellStyle.VerticalAlignment = VerticalAlignment.Center;
cellStyle.Alignment = HorizontalAlignment.Center;
IFont font = workbook.CreateFont();
font.FontHeightInPoints = ;
font.Boldweight = ;
cellStyle.SetFont(font);
var region = new CellRangeAddress(, , , columnsHeader.Keys.Count > ? columnsHeader.Keys.Count - : );
sheet.AddMergedRegion(region);
//合并单元格后样式
((HSSFSheet)sheet).SetEnclosedBorderOfRegion(region, BorderStyle.Thin, NPOI.HSSF.Util.HSSFColor.Black.Index); row = sheet.CreateRow(rowIndex);
row.HeightInPoints = ;
cell = row.CreateCell();
cell.SetCellValue(title);
cell.CellStyle = cellStyle;
rowIndex++;
}
#endregion #region 列头
row = sheet.CreateRow(rowIndex);
row.HeightInPoints = ;
int cellIndex = ;
foreach (var value in columnsHeader.Values)
{
ICellStyle cellStyle = workbook.CreateCellStyle();
cellStyle = workbook.CreateCellStyle();
cellStyle.BorderBottom = BorderStyle.Thin;
cellStyle.BorderLeft = BorderStyle.Thin;
cellStyle.BorderRight = BorderStyle.Thin;
cellStyle.BorderTop = BorderStyle.Thin;
//背景色
cellStyle.FillForegroundColor = HSSFColor.Grey25Percent.Index;
cellStyle.FillPattern = FillPattern.SolidForeground;
//水平垂直居中
cellStyle.VerticalAlignment = VerticalAlignment.Center;
cellStyle.Alignment = HorizontalAlignment.Center;
IFont font = workbook.CreateFont();
font.FontHeightInPoints = ;
font.Boldweight = ;
cellStyle.SetFont(font); cell = row.CreateCell(cellIndex);
cell.CellStyle = cellStyle;
cell.SetCellValue(value);
cellIndex++;
}
rowIndex++;
#endregion #region 主题内容 //单元格样式 注:不要放循环里面,NPOI中调用workbook.CreateCellStyle()方法超过4000次会报错
ICellStyle contentStyle = workbook.CreateCellStyle();
contentStyle.BorderBottom = BorderStyle.Thin;
contentStyle.BorderLeft = BorderStyle.Thin;
contentStyle.BorderRight = BorderStyle.Thin;
contentStyle.BorderTop = BorderStyle.Thin;
contentStyle.VerticalAlignment = VerticalAlignment.Center;
IFont contentFont = workbook.CreateFont();
contentFont.FontHeightInPoints = ;
contentStyle.SetFont(contentFont); //日期格式样式
ICellStyle dateStyle = workbook.CreateCellStyle();
dateStyle.BorderBottom = BorderStyle.Thin;
dateStyle.BorderLeft = BorderStyle.Thin;
dateStyle.BorderRight = BorderStyle.Thin;
dateStyle.BorderTop = BorderStyle.Thin;
dateStyle.VerticalAlignment = VerticalAlignment.Center;
dateStyle.SetFont(contentFont);
IDataFormat format = workbook.CreateDataFormat();
dateStyle.DataFormat = format.GetFormat("yyyy-mm-dd");
foreach (T item in dataSource)
{
row = sheet.CreateRow(rowIndex);
row.HeightInPoints = ;
rowIndex++;
Type type = item.GetType();
PropertyInfo[] properties = type.GetProperties();
if (properties.Length > )
{
cellIndex = ;
foreach (var key in columnsHeader.Keys)
{
cell = row.CreateCell(cellIndex);
cell.CellStyle = contentStyle; if (properties.Select(x => x.Name.ToLower()).Contains(key.ToLower()))
{
var property = properties.Where(x => x.Name.ToLower() == key.ToLower()).FirstOrDefault();
string drValue = property.GetValue(item) == null ? "" : property.GetValue(item).ToString();
//当类型类似DateTime?时
var fullType = property.PropertyType.Name == "Nullable`1" ? property.PropertyType.GetGenericArguments()[].FullName : property.PropertyType.FullName;
switch (fullType)
{
case "System.String": //字符串类型
cell.SetCellValue(drValue);
break;
case "System.DateTime": //日期类型
if (string.IsNullOrEmpty(drValue) || drValue == "0001/1/1 0:00:00")
{
cell.SetCellValue("");
}
else
{
DateTime dateV;
DateTime.TryParse(drValue, out dateV);
cell.SetCellValue(dateV); cell.CellStyle = dateStyle; //格式化显示
}
break;
case "System.Boolean": //布尔型
bool boolV = false;
bool.TryParse(drValue, out boolV);
cell.SetCellValue(boolV);
break;
case "System.Int16": //整型
case "System.Int32":
case "System.Int64":
case "System.Byte":
int intV = ;
int.TryParse(drValue, out intV);
cell.SetCellValue(intV);
break;
case "System.Decimal": //浮点型
case "System.Double":
double doubV = ;
double.TryParse(drValue, out doubV);
cell.SetCellValue(doubV);
break;
case "System.DBNull": //空值处理
cell.SetCellValue("");
break;
default:
cell.SetCellValue("");
break;
}
}
cellIndex++;
}
} }
#endregion #region 结尾行
if (!string.IsNullOrEmpty(footer))
{
ICellStyle cellStyle = workbook.CreateCellStyle();
cellStyle.VerticalAlignment = VerticalAlignment.Center;
cellStyle.Alignment = HorizontalAlignment.Center;
IFont font = workbook.CreateFont();
font.FontHeightInPoints = ;
font.Boldweight = ;
cellStyle.SetFont(font);
var region = new CellRangeAddress(rowIndex, rowIndex, , columnsHeader.Keys.Count > ? columnsHeader.Keys.Count - : );
sheet.AddMergedRegion(region);
//合并单元格后样式
((HSSFSheet)sheet).SetEnclosedBorderOfRegion(region, BorderStyle.Thin, NPOI.HSSF.Util.HSSFColor.Black.Index); row = sheet.CreateRow(rowIndex);
row.HeightInPoints = ;
cell = row.CreateCell();
cell.SetCellValue(footer);
cell.CellStyle = cellStyle;
}
#endregion using (MemoryStream ms = new MemoryStream())
{
workbook.Write(ms);
ms.Flush();
ms.Seek(, SeekOrigin.Begin);
return ms.ToArray();
                //或者直接导出不用返回值  var response = System.Web.HttpContext.Current.Response;
//response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
//response.ContentType = "application/vnd.ms-excel";
//response.AddHeader("Content-Disposition", "attachment;filename=" + fileName + ".xls");
//response.BinaryWrite(ms.ToArray());
//response.Buffer = true;
//response.Flush();
//response.End();
            }
}

Controller中调用:

Dictionary<string, string> collection = new Dictionary<string, string>();
collection.Add("字段名", "显示名");
collection.Add("name", "姓名");
collection.Add("age", "年龄");
collection.Add("grade", "分数"); var byteInfo = JXUtil.ExcelHelper.ExportExcel<Student>(collection, list);
return File(byteInfo, "application/vnd.ms-excel", string.Format("记录-{0}.xls", DateTime.Now.ToString("yyyyMMddHHmm")));
//无返回值直接调用    ExcelHelper.ExportExcel(collection, list, "广告位excel");

  

NPOI 导出excel 通用方法的更多相关文章

  1. java根据xml配置文件导出excel通用方法

    java web项目中时常会用到导出功能,而导出excel几乎是每个项目必备的功能之一.针对形形色色的导出方法及个人平时的工作经验,特将导出excel方法整理成通用的方法,根据xml配置来实现特定的导 ...

  2. NOPI 导出excel 通用方法

    public static byte[] ExportExcel<T>(Dictionary<string, string> columnsHeader, List<T& ...

  3. asp.net MVC NPOI导出excel通用

    一.创建一个类文件添加 public class ExportToExcelColumn { public ExportToExcelColumn(string _Columnnames, strin ...

  4. java导出excel通用方法

    首先需要引入的jar包: 正式代码了. import java.io.FileOutputStream; import java.io.OutputStream; import java.net.UR ...

  5. DateTable利用NPOI导出Excel 公共方法

    protected void Export_Excel(DataTable dt) { string filename = "学生基本信息.xls"; ) { filename = ...

  6. NPOI导入导出EXCEL通用类,供参考,可直接使用在WinForm项目中

    以下是NPOI导入导出EXCEL通用类,是在别人的代码上进行优化的,兼容xls与xlsx文件格式,供参考,可直接使用在WinForm项目中,由于XSSFWorkbook类型的Write方法限制,Wri ...

  7. MVC NPOI Linq导出Excel通用类

    之前写了一个模型导出Excel通用类,但是在实际应用中,可能不是直接导出模型,而是通过Linq查询后获取到最终结果再导出 通用类: public enum DataTypeEnum { Int = , ...

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

    在用NPOI导出EXCEL的时候设置分页,在网上有查到用sheet1.SetRowBreak(i)方法,但一直都没有起到作用.经过研究是要设置  sheet1.FitToPage = false; 而 ...

  9. [转]NPOI导出EXCEL 打印设置分页及打印标题

    本文转自:http://www.cnblogs.com/Gyoung/p/4483475.html 在用NPOI导出EXCEL的时候设置分页,在网上有查到用sheet1.SetRowBreak(i)方 ...

随机推荐

  1. hreeJS加载Obj资源后如何实现内存释放?

    问题: 我利用ThreeJS做了一个在同一个场景下动态加载Obj的页面,具体功能是:点击按钮A:加载A模型,点击按钮B:加载B模型...现在的问题是,前面已经加载过的模型,无法实现释放,内存一直在累加 ...

  2. canvas学习持续更新

    参考:菜鸟教程,canvas教程 绘制一个简单的矩形 <body> <canvas id="myCanvas" width="200" hei ...

  3. windows8.1 初体验

    昨天装了Win8.1,Office2013 由于是英文版的,需要装一下中文语言包,然后就能使用自带的微软拼音输入法了. 我喜欢双屏时的桌面背景,选择span时一张图片可以跨越2个屏幕,比win7的好. ...

  4. 2018.10.20 bzoj2748: [HAOI2012]音量调节(背包)

    传送门 这题是不是太sbsbsb了一点. 难度直逼普及-. 直接背包判存在性就行了. 代码: #include<bits/stdc++.h> using namespace std; bo ...

  5. 2018.10.01 bzoj3237: [Ahoi2013]连通图(cdq分治+并查集)

    传送门 cdq分治好题. 对于一条边,如果加上它刚好连通的话,那么删掉它会有两个大集合A,B.于是我们先将B中禁用的边连上,把A中禁用的边禁用,再递归处理A:然后把A中禁用的边连上,把B中禁用的边禁用 ...

  6. 2018.07.06 POJ2536 Gopher II(二分图匹配)

    Gopher II Time Limit: 2000MS Memory Limit: 65536K Description The gopher family, having averted the ...

  7. win 控制台工作路径切换

    1.如果是同磁盘 直接cd 列如cd C:\mysql\bin 2.如果不是同一磁盘 则要2.1 d: 操作 2.2 cd D:\Software\xampp\address\mysql\bin ps ...

  8. redis学习-有序集合(zset)常用命令

    zadd:有序集合增加一个或者多个键值对 与set集合不同,zset添加的时候需要 指定 score,这个是用来排名的 zrange:返回指定范围的键 zcount:返回集合指定范围的个数(以每个键值 ...

  9. 手机PC文件传输

    QQ啥的现在直接无法全部退出,很纠结后台运行,时不时的来条消息,明明电脑QQ还开着,越来越流氓了. 服务端代码: <%@ Page Language="C#" %> & ...

  10. IntelliJ IDEA 2017版 spring-boot使用Spring Data JPA搭建基础版的三层架构

    1.配置环境pom <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...