c# NPOI文件操作
public static Byte[] RenderDataToExcel<T>(List<T> SourceList, List<String> filter) where T : new()
{
XSSFWorkbook workbook = null;
MemoryStream ms = null;
ISheet sheet = null;
XSSFRow headerRow = null;
try
{
workbook = new XSSFWorkbook();
ms = new MemoryStream();
sheet = workbook.CreateSheet();
headerRow = (XSSFRow)sheet.CreateRow(); PropertyInfo[] arrProperty = RemoveFilterColumn<T>(filter); PropertyInfo pi = null;
for (int i = ; i < arrProperty.Length; i++)
{
pi = arrProperty[i];
headerRow.CreateCell(i).SetCellValue(GetPropertyDescription(pi));
} int rowIndex = ;
for (int i = ; i < SourceList.Count; i++)
{
XSSFRow dataRow = (XSSFRow)sheet.CreateRow(rowIndex);
for (int j = ; j < arrProperty.Length; j++)
{
pi = arrProperty[j];
object piValue = pi.GetValue(SourceList[i], null);
if (piValue == null)
{
dataRow.CreateCell(j).SetCellValue("");
continue;
}
Type pitype = pi.PropertyType;
if (pitype.Name.ToLower().Contains("nullable"))
{
pitype = Nullable.GetUnderlyingType(pitype);
}
//var rowNumberAttr = pi.GetCustomAttributes(typeof(Attribute), false);
//if (rowNumberAttr != null && rowNumberAttr.Length > 0)
//{
// dataRow.CreateCell(j).SetCellValue((i + 1).ToString());
// continue;
//}
if (pitype == typeof(bool))
{
dataRow.CreateCell(j).SetCellValue(Convert.ToBoolean(piValue) ? "是" : "否");
continue;
}
if (pitype.IsEnum)
{
dataRow.CreateCell(j).SetCellValue(EnumHelper.GetDescription(pitype, Convert.ToInt32(piValue)));
continue;
}
if (pitype == typeof(DateTime)
|| pitype == typeof(DateTime?))
{
//var showDateTimeAttr = pi.GetCustomAttributes(typeof(DateTimeFormatAttribute), false);
//if (showDateTimeAttr != null && showDateTimeAttr.Length > 0)
//{
// DateTime nowtime = DateTime.Parse(piValue.ToString());
// arrData[i + 1, j] = nowtime.ToString((showDateTimeAttr[0] as DateTimeFormatAttribute).DataFormatString);
// continue;
//} //default datetime showformater
dataRow.CreateCell(j).SetCellValue(DateTime.Parse(piValue.ToString()).ToString("yyyy-MM-dd HH:mm:ss"));
continue;
}
dataRow.CreateCell(j).SetCellValue(piValue.ToString());
}
++rowIndex;
}
//列宽自适应,只对英文和数字有效 这个动作比较耗时间
//for (int i = 0; i <= arrProperty.Length; ++i)
// sheet.AutoSizeColumn(i);
workbook.Write(ms);
ms.Flush();
return ms.ToArray();
}
catch (Exception ex)
{
Log.loggeremail.Error("RenderDataTableToExcel Exception:"+ex.Message);
return null;
}
finally
{
ms.Close();
sheet = null;
headerRow = null;
workbook = null;
}
} public static void SaveListToExcel<T>(List<T> SourceList, List<String> filter, string filePath) where T : new()
{
XSSFWorkbook workbook = null;
ISheet sheet = null;
XSSFRow headerRow = null;
try
{
workbook = new XSSFWorkbook();
sheet = workbook.CreateSheet();
headerRow = (XSSFRow)sheet.CreateRow(); PropertyInfo[] arrProperty = RemoveFilterColumn<T>(filter); PropertyInfo pi = null;
for (int i = ; i < arrProperty.Length; i++)
{
pi = arrProperty[i];
headerRow.CreateCell(i).SetCellValue(GetPropertyDescription(pi));
} int rowIndex = ;
for (int i = ; i < SourceList.Count; i++)
{
XSSFRow dataRow = (XSSFRow)sheet.CreateRow(rowIndex);
for (int j = ; j < arrProperty.Length; j++)
{
pi = arrProperty[j];
object piValue = pi.GetValue(SourceList[i], null);
if (piValue == null)
{
dataRow.CreateCell(j).SetCellValue("");
continue;
}
Type pitype = pi.PropertyType;
if (pitype.Name.ToLower().Contains("nullable"))
{
pitype = Nullable.GetUnderlyingType(pitype);
}
//var rowNumberAttr = pi.GetCustomAttributes(typeof(Attribute), false);
//if (rowNumberAttr != null && rowNumberAttr.Length > 0)
//{
// dataRow.CreateCell(j).SetCellValue((i + 1).ToString());
// continue;
//}
if (pitype == typeof(bool))
{
dataRow.CreateCell(j).SetCellValue(Convert.ToBoolean(piValue) ? "是" : "否");
continue;
}
if (pitype.IsEnum)
{
dataRow.CreateCell(j).SetCellValue(EnumHelper.GetDescription(pitype, Convert.ToInt32(piValue)));
continue;
}
if (pitype == typeof(DateTime)
|| pitype == typeof(DateTime?))
{
//var showDateTimeAttr = pi.GetCustomAttributes(typeof(DateTimeFormatAttribute), false);
//if (showDateTimeAttr != null && showDateTimeAttr.Length > 0)
//{
// DateTime nowtime = DateTime.Parse(piValue.ToString());
// arrData[i + 1, j] = nowtime.ToString((showDateTimeAttr[0] as DateTimeFormatAttribute).DataFormatString);
// continue;
//} //default datetime showformater
dataRow.CreateCell(j).SetCellValue(DateTime.Parse(piValue.ToString()).ToString("yyyy-MM-dd HH:mm:ss"));
continue;
}
dataRow.CreateCell(j).SetCellValue(piValue.ToString());
}
++rowIndex;
}
//列宽自适应,只对英文和数字有效 这个动作比较耗时间
//for (int i = 0; i <= arrProperty.Length; ++i)
// sheet.AutoSizeColumn(i); using (var file = new FileStream(filePath, FileMode.Create))
{
workbook.Write(file);
file.Close();
file.Dispose();
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
sheet = null;
headerRow = null;
workbook = null;
}
} /// <summary>
/// 创建一个excel
/// </summary>
/// <returns></returns>
public static XSSFWorkbook CreateXSSFWorkbook()
{
XSSFWorkbook xssfworkbook = new XSSFWorkbook();
return xssfworkbook;
} /// <summary>
/// 创建一个sheet
/// </summary>
/// <param name="hssfworkbook">excel</param>
/// <param name="sheetName">sheet名称</param>
/// <param name="isFreezePane">是否存在冻结</param>
/// <param name="colSplit"></param>
/// <param name="rowSplit">行数</param>
/// <param name="leftmostColumn"></param>
/// <param name="topRow">顶上N行</param>
/// <returns></returns>
public static ISheet CreateSheet(XSSFWorkbook xssfworkbook, string sheetName, bool isFreezePane = false, int colSplit = , int rowSplit = , int leftmostColumn = , int topRow = )
{
ISheet sheet1 = xssfworkbook.CreateSheet(sheetName); if (isFreezePane)
{
sheet1.CreateFreezePane(colSplit, rowSplit, leftmostColumn, topRow);
} return sheet1;
} public static IRow CreateRow(ISheet sheet, int rowIndex)
{
IRow row = sheet.CreateRow(rowIndex);
return row;
} public static ICell CreateCell(XSSFWorkbook xssfworkbook, IRow row, int cellIndex, string cellValue, bool isLock = true)
{
ICell cell = row.CreateCell(cellIndex);
cell.SetCellValue(cellValue);
//加锁
var locked = xssfworkbook.CreateCellStyle();
locked.IsLocked = isLock;
cell.CellStyle = locked; return cell;
} public static ICellStyle LockedRow(XSSFWorkbook xssfworkbook)
{
var locked = xssfworkbook.CreateCellStyle();
locked.IsLocked = true;
return locked;
} public static ICellStyle UnLockedRow(XSSFWorkbook xssfworkbook)
{
var locked = xssfworkbook.CreateCellStyle();
locked.IsLocked = false;
return locked;
} /// <summary>
/// 获取单元格样式
/// </summary>
/// <param name="hssfworkbook">Excel操作类</param>
/// <param name="font">单元格字体</param>
/// <param name="fillForegroundColor">图案的颜色</param>
/// <param name="fillPattern">图案样式</param>
/// <param name="fillBackgroundColor">单元格背景</param>
/// <param name="ha">垂直对齐方式</param>
/// <param name="va">垂直对齐方式</param>
/// <returns></returns>
public static ICellStyle GetCellStyle(XSSFWorkbook hssfworkbook, IFont font, HSSFColor fillForegroundColor, FillPattern fillPattern, HSSFColor fillBackgroundColor, NPOI.SS.UserModel.HorizontalAlignment ha, VerticalAlignment va, bool hasBorder)
{
ICellStyle cellstyle = hssfworkbook.CreateCellStyle();
cellstyle.FillPattern = fillPattern;
cellstyle.Alignment = ha;
cellstyle.VerticalAlignment = va;
if (fillForegroundColor != null)
{
cellstyle.FillForegroundColor = fillForegroundColor.Indexed;
}
if (fillBackgroundColor != null)
{
cellstyle.FillBackgroundColor = fillBackgroundColor.Indexed;
}
if (font != null)
{
cellstyle.SetFont(font);
}
if (hasBorder)
{
//有边框
cellstyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
cellstyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
cellstyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
cellstyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
}
return cellstyle;
} /// <summary>
/// 合并单元格
/// </summary>
/// <param name="sheet">要合并单元格所在的sheet</param>
/// <param name="rowstart">开始行的索引</param>
/// <param name="rowend">结束行的索引</param>
/// <param name="colstart">开始列的索引</param>
/// <param name="colend">结束列的索引</param>
public static void SetCellRangeAddress(ISheet sheet, int rowstart, int rowend, int colstart, int colend)
{
CellRangeAddress cellRangeAddress = new CellRangeAddress(rowstart, rowend, colstart, colend);
sheet.AddMergedRegion(cellRangeAddress);
} /// <summary>
/// 建立下拉,验证数据有效性
/// </summary>
/// <param name="hssfworkbook"></param>
/// <param name="sheet"></param>
/// <param name="firstRow"></param>
/// <param name="lastRow"></param>
/// <param name="firstCol"></param>
/// <param name="lastCol"></param>
/// <param name="refersToFormula"></param>
/// <param name="XSSFName"></param>
public static void SetValidationData(XSSFWorkbook hssfworkbook, ISheet sheet, int firstRow, int lastRow, int firstCol, int lastCol, string refersToFormula, string XSSFName)
{
//数据有效性 下拉
XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper(sheet as XSSFSheet);
//位置
CellRangeAddressList regions = new CellRangeAddressList(firstRow, lastRow, firstCol, lastCol); XSSFName range = (XSSFName)hssfworkbook.CreateName();
range.RefersToFormula = refersToFormula;
range.NameName = XSSFName;
XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint)dvHelper.CreateFormulaListConstraint(XSSFName); XSSFDataValidation dataValidate = (XSSFDataValidation)dvHelper.CreateValidation(dvConstraint, regions);
sheet.AddValidationData(dataValidate);
}
调用:
List<String> filter = new List<string>();
filter.Add("LableBatchNo");//过滤列
byte[] byteList = ExcelHelper.RenderToExcel<SecurityLabelModel>(allList, filter);
MemoryStream stream = new MemoryStream(byteList);
stream.Seek(, ); return new FileStreamResult(stream, "application/vnd.ms-excel") { FileDownloadName = HttpUtility.UrlPathEncode(名称 + DateTime.Now.ToString("yyyyMMddHHmmssfff") + 后缀) };
c# NPOI文件操作的更多相关文章
- 对Aspose.Cells Excel文件操作的扩展
工作中对Excel操作的需求很是常见,今天其他项目组的同事在进行Excel数据导入时,使用Aspose.Cells Excel 遇到了些问题. 刚好闲来不忙,回想自己用过的Excel文件操作,有NPO ...
- 【.NET深呼吸】Zip文件操作(1):创建和读取zip文档
.net的IO操作支持对zip文件的创建.读写和更新.使用起来也比较简单,.net的一向作风,东西都准备好了,至于如何使用,请看着办. 要对zip文件进行操作,主要用到以下三个类: 1.ZipFile ...
- 野路子出身PowerShell 文件操作实用功能
本文出处:http://www.cnblogs.com/wy123/p/6129498.html 因工作需要,处理一批文件,本想写C#来处理的,后来想想这个是PowerShell的天职,索性就网上各种 ...
- Node基础篇(文件操作)
文件操作 相关模块 Node内核提供了很多与文件操作相关的模块,每个模块都提供了一些最基本的操作API,在NPM中也有社区提供的功能包 fs: 基础的文件操作 API path: 提供和路径相关的操作 ...
- 归档NSKeyedArchiver解归档NSKeyedUnarchiver与文件管理类NSFileManager (文件操作)
========================== 文件操作 ========================== 一.归档NSKeyedArchiver 1.第一种方式:存储一种数据. // 归档 ...
- SQL Server附加数据库报错:无法打开物理文件,操作系统错误5
问题描述: 附加数据时,提示无法打开物理文件,操作系统错误5.如下图: 问题原因:可能是文件访问权限方面的问题. 解决方案:找到数据库的mdf和ldf文件,赋予权限即可.如下图: 找到mdf ...
- 通过cmd完成FTP上传文件操作
一直使用 FileZilla 这个工具进行相关的 FTP 操作,而在某一次版本升级之后,发现不太好用了,连接老是掉,再后来完全连接不上去. 改用了一段时间的 Web 版的 FTP 工具,后来那个页面也 ...
- Linux文件操作的主要接口API及相关细节
操作系统API: 1.API是一些函数,这些函数是由linux系统提供支持的,由应用层程序来使用,应用层程序通过调用API来调用操作系统中的各种功能,来干活 文件操作的一般步骤: 1.在linux系统 ...
- C语言的fopen函数(文件操作/读写)
头文件:#include <stdio.h> fopen()是一个常用的函数,用来以指定的方式打开文件,其原型为: FILE * fopen(const char * path, c ...
随机推荐
- 1、kafka概述
一.关于消息队列 消息队列是一种应用间的通信方式,消息就是是指在应用之间传送的数据,它也是进程通信的一种重要的方式. 1.消息队列的基本架构 producer:消息生产者. broker:消息处理中心 ...
- Angular2发送HTTP请求SpringBoot后台跨域问题解决
Angular通过http发送post请求至SpringBoot的Controller,由于同源策略的保护,遇到跨域问题: • 源(origin)就是协议(http).域名(localhost)和端口 ...
- (一)Cisco DHCP Snooping原理(转载)
采用DHCP服务的常见问题架设DHCP服务器可以为客户端自动分配IP地址.掩码.默认网关.DNS服务器等网络参数,简化了网络配置,提高了管理效率.但在DHCP服务的管理上存在一些问题,常见的有: ●D ...
- 大数据应用期末总评Hadoop综合大作业
作业要求来源于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3339 1.将爬虫大作业产生的csv文件上传到HDFS 此次作业选取的 ...
- 团队作业-Alpha(3/4)
队名:软工9组 组长博客:https://www.cnblogs.com/cmlei/ 作业博客:https://edu.cnblogs.com/campus/fzu/SoftwareEngineer ...
- Cookie和Session原理
由于HTTP是无状态的协议,客户程序每次都去web页面,都打开到web服务器的单独的连接,并且不维护客户的上下文信息.如果需要维护上下文信息,比如用户登录系统后,每次都能够知道操作的是此登录用户,而不 ...
- 005 vue路由
一:元素的获取 1.ref元素获取 可以通过ref获取DOm,也可以获取组件的引用 <!DOCTYPE html> <html lang="en"> < ...
- DispatcherServlet 被加载顺序
javax.servlet.Servlet#init 0 -> javax.servlet.GenericServlet#init(javax.servlet.ServletConfig) 1 ...
- 【Linux】使用 walle + docker-compose 部署上线单获取不到分支的解决办法
背景: 使用walle+docker 自动化部署项目.在新建上线单时候拉取不到分支,并提示有错误.但是没有错误信息 错误排查: 首先确保远程仓库已添加宿主机公钥,且一定先在宿主机手动连接一下远程仓库, ...
- Python十大装B语法
https://blog.csdn.net/xufive/article/details/102856921