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 ...
随机推荐
- HTML之微信全屏播放视频
不废话,上代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...
- Spark-Streaming kafka count 案例
Streaming 统计来自 kafka 的数据,这里涉及到的比较,kafka 的数据是使用从 flume 获取到的,这里相当于一个小的案例. 1. 启动 kafka Spark-Streaming ...
- mysql tan() 函数
mysql> ); +--------------------+ | tan(pi()/) | +--------------------+ | 0.9999999999999999 | +-- ...
- [Vue warn]: You are using the runtime-only build of Vue where the template compiler is not available
原文链接https://blog.csdn.net/xiaomajia029/article/details/88320233 问题描述: 原因分析:在项目配置的时候,默认 npm 包导出的是运行时构 ...
- TCP的连接如何知道对方已经异常断开
断电的话,对方不会发送任何数据包过来,包括RST.主机无法得知.如果是TCP已经连接,有个定时器,会发送空包,sequence number不变.如果一直收不到ack,会断定对方已经无法通信,而释放系 ...
- RedHat离线安装Python3以及各种依赖
RedHat离线安装Python3以及各种依赖 1, yum install -y ncurses-libs zlib-devel mysql-devel bzip2-devel openssl-de ...
- MongoDB笔记: 常见问题
系统配置 设置ulimit MongoDB的文件机制 每个Collection会单独创建一个数据文件(collection-xxxxxx.wt) 每个索引会单独创建一个文件(index-xxxxxx. ...
- 生成Nginx服务器SSL证书和客户端证书
Nginx服务器SSL证书 生成pass key 下面的命令用于生成一个2048bit的pass key, -passout pass:111111 用于避免交互式输入密码 [tomcat@a02 t ...
- 环境变量path的值大于1024的解决办法
原文传送门:https://blog.csdn.net/jytxj111/article/details/43916421 1.打开Path,点击默认文本(WIN 10),将所有路径备份下来 2.新建 ...
- date命令时间戳和时间之间的转换
这里是在mac下的操作,主要就是用date这个命令,更多的用法用man命令查看 字符串格式时间 TO 时间戳我们知道date 命令可以直接把当前时间转化为时间戳 # date +%s143678152 ...