NOPI 导出excel 通用方法
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");
NOPI 导出excel 通用方法的更多相关文章
- java根据xml配置文件导出excel通用方法
java web项目中时常会用到导出功能,而导出excel几乎是每个项目必备的功能之一.针对形形色色的导出方法及个人平时的工作经验,特将导出excel方法整理成通用的方法,根据xml配置来实现特定的导 ...
- NPOI 导出excel 通用方法
public static byte[] ExportExcel<T>(Dictionary<string, string> columnsHeader, List<T& ...
- java导出excel通用方法
首先需要引入的jar包: 正式代码了. import java.io.FileOutputStream; import java.io.OutputStream; import java.net.UR ...
- NPOI导入导出EXCEL通用类,供参考,可直接使用在WinForm项目中
以下是NPOI导入导出EXCEL通用类,是在别人的代码上进行优化的,兼容xls与xlsx文件格式,供参考,可直接使用在WinForm项目中,由于XSSFWorkbook类型的Write方法限制,Wri ...
- NOPI导出Excel
NOPI导出Excel /// <summary> /// 导出的方法 Excel样式 /// </summary> /// <param name="ds&q ...
- MVC NPOI Linq导出Excel通用类
之前写了一个模型导出Excel通用类,但是在实际应用中,可能不是直接导出模型,而是通过Linq查询后获取到最终结果再导出 通用类: public enum DataTypeEnum { Int = , ...
- asp.net中导出Excel的方法
一.asp.net中导出Excel的方法: 本文转载 在asp.net中导出Excel有两种方法,一种是将导出的文件存放在服务器某个文件夹下面,然后将文件地址输出在浏览器上:一种是将文件直接将文件输出 ...
- ASP.NET导出excel表方法汇总
asp.net里导出excel表方法汇总 1.由dataset生成 public void CreateExcel(DataSet ds,string typeid,string FileName) ...
- 懒人小工具:自动生成Model,Insert,Select,Delete以及导出Excel的方法
在开发的过程中,我们为了节约时间,往往会将大量重复机械的代码封装,考虑代码的复用性,这样我们可以节约很多时间来做别的事情.最近跳槽到一节webform开发的公司,主要是开发自己公司用的ERP.开始因为 ...
随机推荐
- 深入浅出:重温JAVA中接口与抽象的区别
抽象类:声明一个抽象类,就是在类的声明开头.在Class关键字的前面使用关键字abstract 下面定义一个抽象类,代码如下: abstract class A{ abstract void call ...
- QT笔记(1)--QT编程环境搭建
一.QT简介 Qt 是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架.它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器.Qt是面向对象的框架,使用特殊 ...
- android stagefright基本流程总结
数据流的封装一. 由数据源DataSource生成MediaExtractor. 通过MediaExtractor::Create(dataSource)来实现.Create方法通过两步来生成相应的M ...
- VLC源码分析知识总结
1. 关于#和## 1.1).在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号. 比如在早 ...
- .NETFramework类库
.NET Framework 包括可加快和优化开发过程并提供对系统功能的访问的类.接口和值类型. 为了便于语言之间进行交互操作,大多数 .NET Framework 类型都符合 CLS,因而可在编译器 ...
- NPOI兼容 excel2003,2007版本
根据项目需要,需要对excel进行导入导出,所以选择NPOI,优点在这里就不详细介绍了,下面进入正题. public int Import(string path) { IList<Studen ...
- 浅谈JavaScript DOM编程艺术读后感和一点总结
最近工作不是很忙就想想想JavaScript的内部组成和一些要点,就是从这本书开始的.对新手来说还好,简单易懂. 简单终结下我重书中学到的一些要点. 下面都是个人学习的要点提取: 1.给自己预留退路, ...
- 世界国家名与英文名【json】
英文版 var geolocation= [ ["AO", "Angola"], ["AF", "Afghanistan& ...
- 生成简历经验总结(解析HTML字符串)
在生成简历的过程中,我的做法是首先设计一个word的简历模板,设置好书签,从数据库中读取数据,调用aspose进行填充.一般的数据项包括图片文件都没有问题. 问题出在了HTML字符串上.因为简历中有几 ...
- 显示Title和隐藏Title的ListView
一.主要步骤 ①.调用ListView的addHeaderView(),创建一个与Title一样高的View,这样ListView就不会刚开始被遮盖了 ②.调用ListView的setOnTouchE ...