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. scp无密码访问scp -i

    网上搜索,可以发现大概有以下情况 1.使用expect交互 2.sshpass 但因为他们都需要安装第三方的软件,不适合我们这样的场景,我们很多时间是绝不允许安装其他软件在客户机上的. 我的场景是在本 ...

  2. android整理的一些基础知识

    本篇文章内容大部分是来源于本人实际开发中的心得总结,不是非常全面,咱才疏学浅,如果有错误的地方恳请各位指出哦~ android四大组件 四大组件包括:Activity(活动),Service(服务), ...

  3. jvm2

    垃圾回收器的实现: 1.让用户都暂停,不再产生垃圾,就去收集垃圾.新生代用复制算法清理垃圾,老生代用标记整理算法搜集垃圾. 优秀的算法:服务端默认是CMS收集器. %..jvm案例演示 内存: Jco ...

  4. ipythons 使用攻略

    ipython是一个 python 的交互式 shell,比默认的 python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数. 安 ...

  5. jenkins邮箱配置以及结合ansible进行批量构建

    tomcat8.5以上版本,jenkins2.7以上版本 首先填写你的系统管理员邮件地址,否则会使用jenkins系统本身的邮箱 填写的163邮箱,通过smtp认证填写正确的账号和密码(注意这里的密码 ...

  6. Spring Security核心概念介绍

    Spring Security是一个强大的java应用安全管理库,特别适合用作后台管理系统.这个库涉及的模块和概念有一定的复杂度,而大家平时学习Spring的时候也不会涉及:这里基于官方的参考文档,把 ...

  7. C++之STL迭代器(iterator)

    [摘要]本文是对STL--迭代器(iterator)的讲解,对学习C++编程技术有所帮助,与大家分享. 原文:http://www.cnblogs.com/qunews/p/3761405.html ...

  8. [翻译]理解CSS模块方法

    在这个前端发展日新月异的世界,能够找到有所影响的概念相当困难,而将其准确无误的传达,让人们愿意尝试,更是难上加难. 拿CSS来看,在我们写CSS时,工具侧最大的变化,也就是CSS处理器的使用,如:可能 ...

  9. Vue.js项目部署在Tomcat服务器上

    1.在本地的Vue框架中 执行npm run build  将我们的项目打包到dist 文件夹中 2.在服务器上的Tomcat的 webapps文件夹下,新建一个文件夹如:frontvue 3.启动t ...

  10. springboot集成shiro 前后端分离 统一处理shiro异常

    在前后端分离的情况下,shiro一些权限异常处理会返回401之类的结果,这种结果不好统一管理.我们希望的结果是统一管理,所有情况都受我们控制 就算权限验证失败,我们也希望返回200,并且返回我们定义的 ...