NPOI:操作总结
1.套路
使用了NPOI一段时间,也慢慢了解了操作的流程,或者说套路:
a.创建Workbook:
HSSFWorkbook Workbook = new HSSFWorkbook();
b.在Workbook中创建一个工作表并获得该工作表的索引(暂且这么说吧):
HSSFSheet sheet = (HSSFSheet)Workbook.CreateSheet("sheet1");// 前面必须要加强制转换
c.在工作表中创建行然后获得该行的索引:
HSSFRow row = (HSSFRow)sheet.CreateRow(); // 0是指第一行,可以直接创建其他行,如创建第4行而不用先创建前面的
d.在行中创建一个单元格并获得该单元格的索引:
HSSFCell cell = new (HSSFCell)row.CreateCell(); // 该处的0和上面所说一样
e.然后就可以愉快地对单元格进行操作了,看起来是一种递进方式,这样操作起来也方便。
2.封装的写单元格 WriteCell
为了自己使用方便,我把设置单元格的值的功能封装了一下,可以实现随意按照行列位置写,单元格或者行的创建都封装了,只需要引用工作表:
private static void WriteCell(int row, int col, string val, ref HSSFSheet sheet)
{
if (sheet.GetRow(row - ) == null) // 判断行是否被创建
{
HSSFRow t_row = (HSSFRow)sheet.CreateRow(row - ); HSSFCell t_cell = (HSSFCell)t_row.CreateCell(col - ); t_cell.SetCellValue(val);
}
else
{
HSSFRow t_row = (HSSFRow)sheet.GetRow(row - ); if (t_row.GetCell(col - ) == null) // 判断列(单元格)是否被创建
{
HSSFCell t_cell = (HSSFCell)t_row.CreateCell(col - ); t_cell.SetCellValue(val);
}
else
{
HSSFCell t_cell = (HSSFCell)t_row.GetCell(col - ); t_cell.SetCellValue(val);
}
}
}
3.封装的复制单元格 CopyCell
将一个工作表中的某个单元格的内容复制到另一个工作表中的某个单元格:
private static bool CopyCell(int dst_row, int dst_col, int src_row, int src_col, ref HSSFSheet dst, ref HSSFSheet src)
{
if (src.GetRow(src_row - ) == null)
{
return false; // 没有该行
}
else
{
HSSFRow t_src_row = (HSSFRow)src.GetRow(src_row - );
if (t_src_row.GetCell(src_col - ) == null)
{
return false;
}
else
{
HSSFCell t_src_cell = (HSSFCell)t_src_row.GetCell(src_col - ); WriteCell(dst_row, dst_col, t_src_cell.ToString(), ref dst);
}
} return true;
}
4.设置行高
private static void SetRowHeight(int row, short height, ref HSSFSheet sheet)
{
if (sheet.GetRow(row - ) == null)
{
HSSFRow t_row = (HSSFRow)sheet.CreateRow(row - ); t_row.Height = height;
}
else
{
HSSFRow t_row = (HSSFRow)sheet.GetRow(row - ); t_row.Height = height;
}
}
5.设置列宽
sheet.SetColumnWidth(, *); // 第一行,并且列宽是256的倍数
6.设置指定单元格是否水平或垂直居中
private static void SetCellAlignmentCenter(int row,int col,bool vertical,bool horizontal,ref HSSFWorkbook wb)
{
HSSFCellStyle cellStyle = (HSSFCellStyle)wb.CreateCellStyle(); // 首先在工作簿中创建一个样式并获得索引,可以多次创建 HSSFSheet sheet = (HSSFSheet)wb.GetSheetAt(); if(vertical) // 垂直
{
cellStyle.VerticalAlignment = VerticalAlignment.Center;
}
else
{
cellStyle.VerticalAlignment = VerticalAlignment.Bottom; // 默认在底部
}
if(horizontal) // 水平
{
cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
}
else
{
cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Left; // 默认左对齐
}
if (sheet.GetRow(row - ) == null)
{
HSSFRow t_row = (HSSFRow)sheet.CreateRow(row - ); HSSFCell t_cell = (HSSFCell)t_row.CreateCell(col - ); t_cell.CellStyle = cellStyle;
}
else
{
HSSFRow t_row = (HSSFRow)sheet.GetRow(row - ); if (t_row.GetCell(col - ) == null)
{
HSSFCell t_cell = (HSSFCell)t_row.CreateCell(col - ); t_cell.CellStyle = cellStyle;
}
else
{
HSSFCell t_cell = (HSSFCell)t_row.GetCell(col - ); t_cell.CellStyle = cellStyle;
}
} }
7.设置单元格的字体颜色和大小
enum CellFontColor
{
white,
black,
yellow,
blue,
green,
red,
}
enum CellFontSize
{
s10,
s11,
s12,
s14,
s16,
s18,
s20,
s24
}
private static void SetCellFont(int row,int col,CellFontColor color,CellFontSize size,ref HSSFWorkbook wb)
{
HSSFSheet sheet = (HSSFSheet)wb.GetSheetAt();
ICellStyle style = wb.CreateCellStyle();
IFont font = wb.CreateFont();
switch(color)
{
case CellFontColor.black: font.Color = NPOI.HSSF.Util.HSSFColor.Black.Index;
break;
case CellFontColor.blue: font.Color = NPOI.HSSF.Util.HSSFColor.Blue.Index;
break;
case CellFontColor.green: font.Color = NPOI.HSSF.Util.HSSFColor.Green.Index;
break;
case CellFontColor.red: font.Color = NPOI.HSSF.Util.HSSFColor.Red.Index;
break;
case CellFontColor.white: font.Color = NPOI.HSSF.Util.HSSFColor.White.Index;
break;
case CellFontColor.yellow: font.Color = NPOI.HSSF.Util.HSSFColor.Yellow.Index;
break;
}
switch(size)
{
case CellFontSize.s10: font.FontHeightInPoints = ;
break;
case CellFontSize.s11: font.FontHeightInPoints = ;
break;
case CellFontSize.s12: font.FontHeightInPoints = ;
break;
case CellFontSize.s14: font.FontHeightInPoints = ;
break;
case CellFontSize.s16: font.FontHeightInPoints = ;
break;
case CellFontSize.s18: font.FontHeightInPoints = ;
break;
case CellFontSize.s20: font.FontHeightInPoints = ;
break;
case CellFontSize.s24: font.FontHeightInPoints = ;
break;
}
style.SetFont(font); if (sheet.GetRow(row - ) == null)
{
HSSFRow t_row = (HSSFRow)sheet.CreateRow(row - ); HSSFCell t_cell = (HSSFCell)t_row.CreateCell(col - ); t_cell.CellStyle = style;
}
else
{
HSSFRow t_row = (HSSFRow)sheet.GetRow(row - ); if (t_row.GetCell(col - ) == null)
{
HSSFCell t_cell = (HSSFCell)t_row.CreateCell(col - ); t_cell.CellStyle = style;
}
else
{
HSSFCell t_cell = (HSSFCell)t_row.GetCell(col - ); t_cell.CellStyle = style;
}
} }
8.暂时总结到此,以上都是把一些操作封装了,封装的功能不是很完善,主要都是我常用的。
GitHub:https://github.com/whlook/MyExcelUtil
NPOI:操作总结的更多相关文章
- NPOI操作EXCEL(四)——反射机制批量导出excel文件
前面我们已经实现了反射机制进行excel表格数据的解析,既然有上传就得有下载,我们再来写一个通用的导出方法,利用反射机制实现对系统所有数据列表的筛选结果导出excel功能. 我们来构想一下这样一个画面 ...
- NPOI操作Excel辅助类
/// <summary> /// NPOI操作excel辅助类 /// </summary> public static class NPOIHelper { #region ...
- 数据字典生成工具之旅(4):NPOI操作EXECL
这篇会介绍NPOI读写EXECL,读写EXECL的组件很多,可以使用微软自己的COM组件EXECL.exe读写,不过这种方式限制很大. 1:客户环境必须装Office(虽然现在机子上不装Office的 ...
- NPOI操作excel之写入数据到excel表
在上一篇<NPOI操作excel之读取excel数据>我们把excel数据写入了datatable中,本篇就讲如何把datatable数据写入excel中. using System; u ...
- C#开发中使用Npoi操作excel实例代码
C#开发中使用Npoi操作excel实例代码 出处:西西整理 作者:西西 日期:2012/11/16 9:35:50 [大 中 小] 评论: 0 | 我要发表看法 Npoi 是什么? 1.整个Exce ...
- 用NPOI操作EXCEL关于HSSFClientAnchor(dx1,dy1,dx2,dy2,col1,row1,col2,row2)的参数
2.4.1 用NPOI操作EXCEL关于HSSFClientAnchor(dx1,dy1,dx2,dy2,col1,row1,col2,row2)的参数 NPOI教程:http://www.cnb ...
- 使用 WeihanLi.Npoi 操作 CSV
使用 WeihanLi.Npoi 操作 CSV Intro 最近发现 csv 文件在很多情况下都在使用,而且经过大致了解,csv 格式简单,相比 excel 文件要小很多,读取也很是方便,而且也很通用 ...
- C# 如何使用NPOI操作Excel以及读取合并单元格等
C#操作Excel方法有很多,以前用的需要电脑安装office才能用,但因为版权问题公司不允许安装office.所以改用NPOI进行Excel操作,基本上一些简单的Excel操作都没有问题,读写合并单 ...
- NPOI操作之一EXCEL数据导入数据库
一.概要 前面讲到NPOI操作EXCEL导出功能,下面讲下从EXCEL里获取数据添加进数据库. 二.代码 HSSFWorkbook hssfworkbook; public void ExcelDat ...
- 用NPOI操作EXCEL-锁定列CreateFreezePane()
public void ExportPermissionRoleData(string search, int roleStatus) { var workbook = new HSSFWorkboo ...
随机推荐
- python xpath 中的全部用法
不好意思 ,太仓促只能给你们个url 链接:https://blog.csdn.net/hhtnan/article/details/77509549
- 什么是Http无状态?Session、Cookie、Token三者之间的区别
一.什么是HTTP无状态? 1.1定义: HTTP无状态协议,是指协议对于交互性场景没有记忆能力. 1.2举个例子: 在点击一个纯的html网页,请求获取服务器的html文件资源时,每次http请求都 ...
- 2017浙江省赛 D - Let's Chat ZOJ - 3961
地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3961 题目: ACM (ACMers' Chatting Messe ...
- 关于TOSCA自动化测试工具, 我想问一些问题(持续整理中)
通过学习,实践踩坑,有以下问题不太明白 1. Artifacts and results from your complete test portfolio (cross-browser, mobi ...
- java对象在JVM堆中的数据结构
java对象和数组是存放在堆中的,那么这些instance的数据结构是什么呢? 对象头:对象头存放的是这个对象的一些元数据信息.例如每个对象都有哈希值,GC分代年龄,锁状态标志等,这些信息就是存放在对 ...
- ES6 利用 Set 数组去重法
例子: const set = new Set(); [2, 3, 5, 4, 5, 2, 2].forEach(x => set.add(x) ); const arr = [...set]; ...
- imx6q android 添加开机启动脚本
1.在xx/out/target/product/sabresd_6dq/root/init.rc中添加以下内容 ========================================== ...
- 《Java入门第三季》第二章 认识 Java 中的字符串
什么是 Java 中的字符串.1.在Java的世界里,字符串被作为String类型的对象处理. 2.通用的初始化的方式:String s = new String("i love you & ...
- Java:出现错误提示(java.sql.SQLException:Value '0000-00-00' can not be represented as java.sql.Date)
Java:出现错误提示(java.sql.SQLException:Value '0000-00-00' can not be represented as java.sql.Date) 原因分析: ...
- mysql5.6备份
备份之前: 最初的二进制信息: mysql> show master logs; +------------------+-----------+ | Log_name | File_size ...