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. Gentoo64无法启动eth0的问题

    Gentoo64在net文件中配置好eth0的静态IP 代码 1.2: /etc/conf.d/net文件的一个示例 # DHCP config_eth0=( "dhcp" ) # ...

  2. python3.5实现购物车

    一.购物车实现: 购物车功能: 用户登录:密码错误三次锁定账户. 商品列表分页显示:输入页码查看指定页数商品信息. 已购买商品列表:显示已购买的物品列表:可以模糊查询已购买的商品并在终端打印. 充值: ...

  3. NC开发笔记指导

    修改端口 InvocationInfoProxy.getInstance().get().getUserCode(); 前台 Nchome F:\JAVA\Projects\ERPEHROA\ufid ...

  4. Linux下修改时间

    修改linux的时间可以使用date指令 date命令的功能是显示和设置系统日期和时间. 输入date 查看目前系统时间. 修改时间需要 date -功能字符 修改内容 命令中各选项的含义分别为: - ...

  5. Linux centos7安装Mongodb

    Linux centos7安装Mongodb-4.0 1.下载 官方下载地址:https://www.mongodb.com/download-center/community 2.上传解压 1)rz ...

  6. SQL学习笔记之MySQL查询的三层解析

    Mysqld的三层结构: SQL类型: DDL:数据库对象定义语言 对库和表的定义 DML:操作语言 DCL:控制语言 结构化的查询语言:select * from user; 执行该语句时: 1.连 ...

  7. Django学习笔记之Queryset的高效使用

    对象关系映射 (ORM) 使得与SQL数据库交互更为简单,不过也被认为效率不高,比原始的SQL要慢. 要有效的使用ORM,意味着需要多少要明白它是如何查询数据库的.本文我将重点介绍如何有效使用 Dja ...

  8. 如何用纯 CSS 创作气泡填色的按钮特效

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/eKqZjy 可交互视频 ...

  9. java语言基本环境搭建

    从放假开始,就开始路陆陆续续了解关于java语言的学习.首先从语言编辑环境就和以前学习的c语言会有些不同,对java语言的学习也有了很大很多新的认识. 首先从官网上下载jdk,按照娄老师给我们的操作提 ...

  10. Fiddler4调试工具配置使用笔记

    Fiddler最大的用处: 模拟请求.修改请求.手机应用调试 Fiddler最新版本 下载地址: http://www.telerik.com/download/fiddler Fiddler 想要监 ...