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. 什么是Socket?简单点,通俗易懂的?

    网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. 建立网络通信连接至少要一对端口号(socket).socket本质是编程接口(API),对TCP/IP的封装 ...

  2. WebSocket安卓客户端实现详解(一)–连接建立与重连

    http://blog.csdn.net/zly921112/article/details/72973054 前言 这里特别说明下因为WebSocket服务端是公司线上项目所以这里url和具体协议我 ...

  3. 20145310 《Java程序设计》第7周学习总结

    20145310 <Java程序设计>第7周学习总结 教材学习内容总结 本周主要进行第十二章和第十三章的学习. Lambda定义:一个不用被绑定到一个标识符上,并且可能被调用的函数. 在只 ...

  4. 尝试编辑java程序

    尝试编译java程序 之前在用软件eclipse编译过简单的hello  java程序,因为软件操作简单,后来学会了用命令符来编译程序.代码如下 public class abc     {      ...

  5. (java) 第二周学习总结

    在java源代码中,每个变量都必须声明一种类型(type).有两种类型:primitive type和reference type.引用类型引用对象(reference to object),而基本类 ...

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

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

  7. POJ_1159 Palindrome (线性动态规划+滚动数组)

    题意是说,给定一个字符串,问至少还需要插入多少个字符才能使得该字符串成为回文字符串. 这道题一开始做的时候用了一个简单的动态规划,开了一个5000*5000的数组,用递归形式实现,代码如下: 其中d[ ...

  8. Nginx解决post请求405问题

    和工商银行的一个合作项目,对方客户端需要请求我们的一个静态页面,但是客户端发送过来的请求方法用的post,日志显示405错误(请求方法错误),正常一个静态页面直接用get请求就可以了,工行那边说写死了 ...

  9. hibernate关联非主键注解配置

    现在有两张表:一张t_s_user用户表和t_s_user_serial_number用户序号表 CREATE TABLE `t_s_user` ( `id` ) NOT NULL, `email` ...

  10. vue知识汇总

    关于slot solt插槽,用来进行预定义,比如app里面的heard,各种情况下未必一致,把每种情况都加上solt,对应的情况下覆盖solt就可以了