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:操作总结的更多相关文章

  1. NPOI操作EXCEL(四)——反射机制批量导出excel文件

    前面我们已经实现了反射机制进行excel表格数据的解析,既然有上传就得有下载,我们再来写一个通用的导出方法,利用反射机制实现对系统所有数据列表的筛选结果导出excel功能. 我们来构想一下这样一个画面 ...

  2. NPOI操作Excel辅助类

    /// <summary> /// NPOI操作excel辅助类 /// </summary> public static class NPOIHelper { #region ...

  3. 数据字典生成工具之旅(4):NPOI操作EXECL

    这篇会介绍NPOI读写EXECL,读写EXECL的组件很多,可以使用微软自己的COM组件EXECL.exe读写,不过这种方式限制很大. 1:客户环境必须装Office(虽然现在机子上不装Office的 ...

  4. NPOI操作excel之写入数据到excel表

    在上一篇<NPOI操作excel之读取excel数据>我们把excel数据写入了datatable中,本篇就讲如何把datatable数据写入excel中. using System; u ...

  5. C#开发中使用Npoi操作excel实例代码

    C#开发中使用Npoi操作excel实例代码 出处:西西整理 作者:西西 日期:2012/11/16 9:35:50 [大 中 小] 评论: 0 | 我要发表看法 Npoi 是什么? 1.整个Exce ...

  6. 用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 ...

  7. 使用 WeihanLi.Npoi 操作 CSV

    使用 WeihanLi.Npoi 操作 CSV Intro 最近发现 csv 文件在很多情况下都在使用,而且经过大致了解,csv 格式简单,相比 excel 文件要小很多,读取也很是方便,而且也很通用 ...

  8. C# 如何使用NPOI操作Excel以及读取合并单元格等

    C#操作Excel方法有很多,以前用的需要电脑安装office才能用,但因为版权问题公司不允许安装office.所以改用NPOI进行Excel操作,基本上一些简单的Excel操作都没有问题,读写合并单 ...

  9. NPOI操作之一EXCEL数据导入数据库

    一.概要 前面讲到NPOI操作EXCEL导出功能,下面讲下从EXCEL里获取数据添加进数据库. 二.代码 HSSFWorkbook hssfworkbook; public void ExcelDat ...

  10. 用NPOI操作EXCEL-锁定列CreateFreezePane()

    public void ExportPermissionRoleData(string search, int roleStatus) { var workbook = new HSSFWorkboo ...

随机推荐

  1. Andriod实现推送的解决方案(转)

    Andriod上实现消息推送的一般解决策略 第一种解决方案:C2DM云端推送功能 在Android手机平台上,Google提供了C2DM(Cloudto Device Messaging)服务,该服务 ...

  2. [原创]css中a标签去掉锚点文本下划线

    我对博客的认识是:记录问题,解决问题,分享知识.如果有轮子,我不需要造轮子. 1.问题解决方式: 设置属性:text-decoration:none; 2.更多属性参数参考 text-decorati ...

  3. idea+maven本地仓库更新问题

    在POM文件中将dependecy填好,.m2/repository/文件夹下也有相应的包下载了.但idea External Libraries就是引用不到这个包. 怎么mvn clean inst ...

  4. 20145329 《Java程序设计》第五周学习总结

    20145329 <Java程序设计>第五周学习总结 教材学习内容总结 第八章 Java异常处理是要处理Exception类及其子类(Checked Exception),RuntimeE ...

  5. 20145333 《Java程序设计》第5周学习总结

    20145333 <Java程序设计>第5周学习总结 教材学习内容总结 语法与继承架构 使用try.catch Java中所有错误都会被包装成对象,可以尝试(try)执行程序并捕捉(cat ...

  6. 【转】获取Windows系统明文密码神器

    前序 电脑密码忘记了可以用本工具找回,前提是你能进入系统,例如本机保存了远程服务器登录的密码或借别人的电脑,而忘记了密码:mimikatz 2.0工具正好解决了你的问题. 工具下载 binaires ...

  7. Linux crontab命令 定时任务 用法详解以及no crontab for root解决办法

    最近系统服务器进行搬迁,又恰好需要使用定时任务运行程序,而我的程序主要使用PHP写的,然后总结了下定时任务的用法,但是在这里主要写的是关于crontab命令的用法,使用过程中遇到不少问题,例如no c ...

  8. js梳理

    js引用类型 Object Function Array其他皆为基本类型,这和很多高级语言不一样,需要注意!!!! typeof对应基本类型来说更实用---- typeof undefined     ...

  9. windchill系统安装大概步骤

    1.安装VMware Workstation虚拟机 2.win7的64位操作系统(为什么不用32位?因为32位的内存最大只能设置4G) 3.安装Oracle数据库(映射iso文件[上面栏的虚拟机-&g ...

  10. matplotlib 初步学习

    author:pprp Matplotlib数据可视化 [TOC] 安装 conda install matplotlib sudo apt-get install python-matplotlib ...