NPOI操作EXCEL(一)——npoi基础
去年项目有一个子模块需要解析上百张不一样的excel表格入库,当时用的NPOI,做了很久...也尝试想把代码分享到oschina,结果没坚持两篇就放弃了。
赶巧的是,昨天运营那边提出要录入一些基础数据,我想着也就几百个员工、企业的信息,自己找两个姑娘手动录入呗(为啥是姑娘?让一个大老爷们去录假数据,你去吗?反正我不去)...结果,一个同事吭哧吭哧跑来找我:
“手动录入太慢了,填一堆基本信息,还要传头像,传身份证,传营业执照什么的”
嗯哼!想让我写代码给你们录?没门!
于是忽悠道“唉,找领导多要几个人呗。你看我就算给你写代码上传,你也得先整理好excel,图片单独在文件夹存好,还得能和excel的数据匹配起来,等你做完这些,早该手动录完了...”
那同事晃悠着脑袋想了想,说“几万条数据呢,手动录得猴年马月了。再说数据格式本来就很整齐,图片也能和名字匹配上”...然后嘻嘻的望着我
窝艹,怎么感觉挖坑把自己埋了。再说,尼玛现在的运营假数据都是上万条上万条的入库了?我们这些小码农还是太呆啊...
自己挖的坑,含着泪也得填完。
这不,今天又翻出了去年那个项目的代码和资料,扑哧扑哧的干活...
先来介绍一下NPOI基本的东西:
1.下载地址:http://npoi.codeplex.com (最新版已经2.2.0.0了)
2.包里面的DLL文件:
NPOI.dll
OOXML.dll
OpenXml4Net.dll
OpenXmlFormats.dll
ICSharpCode.SharpZipLib.dll
3.NPOI 2.0以后的版本都支持OOXML(EXCEL2007及以上版本)。带XSSF的命名空间支持07及以上,HSSF支持03版本。
XSSF中XSSFWorkbook,XSSFSheet,XSSFRow,XSSFCell分别对应EXCEL中工作簿,工作表,行,列。
HSSF中同样有HSSFWorkbook,HSSFSheet,HSSFRow,HSSFCell
它们继承于同一个接口:IWorkbook(命名空间:using NPOI.SS.UserModel;)
可以用如下代码做版本判断(暂时只考虑.xls与.xlsx文件,博主没用.csv)
IWorkbook workbook = null;
if(System.IO.Path.GetExtension(filePath)=="xls")
{
workbook = new HSSFWorkbook(ExcelFileStream);
}
else if(System.IO.Path.GetExtension(filePath)=="xlsx")
{
workbook = new XSSFWorkbook(ExcelFileStream);
}
else
{
throw new exception("文件类型错误");
}
4.常用的基本方法:
创建工作簿 IWorkbook workbook = new XSSFWorkbook();
按指定名称创建Sheet workbook.CreateSheet("SheetName");
移出Sheet workbook.RemoveSheetAt(SheetIndex);
按名称获得Sheet对象 ISheet sheet = workbook.GetSheet("SheetName ");
根据索引获得Sheet对象 ISheet sheet = workbook.GetSheetAt(SheetIndex);
获得某一个ISheet的所有IRow,通常可以用 ISheet.GetRowEnumerator()
获得某一特定行,可以直接用 ISheet.GetRow(rowIndex)
工作表中第一个有数据行的行号 ISheet.FirstRowNum
工作表中最后一个有数据行的行号 ISheet.LastRowNum
一行中第一个有数据列的列号 IRow.FirstCellNum
一行中最后一个有数据列的列号 IRow.LastCellNum
获取sheet所有合并单元格索引 ISheet.NumMergedRegions
获取某合并单元格的地址(i是合并单元格索引) ISheet.GetMergedRegion(i)
获得数据类型CellRangeAddress,含起始行号和列号
获取某单元格值 Row.GetCell(j).StringCellValue.Trim()
公式单元格如果是数字可以:Row.GetCell(j).NumericCellValue.ToString()
5.NPOI.DLL中包含的模块
NPOI.Util 基础辅助库
NPOI.POIFS OLE2格式读写库,主要负责处理DocumentInformation
NPOI.DDF Microsoft Drawing格式读写库
NPOI.SS Excel 2003和Excel 2007操作库共用的接口库以及公用模块实现,如公式计算库
NPOI.HPSF OLE2的Summary Information和Document Summary Information属性读写库
NPOI.HSSF Excel BIFF格式读写库,这是用户用的最多的命名空间
6.NPOI.OOXML.DLL中包含的模块(主要是2007版本操作方法)
NPOI.XSSF Excel 2007操作库,大部分对象都实现了NPOI.SS的接口
NPOI.XWPF Word 2007操作库
7.EXCEL单元格值基本类型
Unknown = -1, // 未知
Numeric = 0, // 数值型
String = 1, // 文本型
Formula = 2, // 公式型
Blank = 3, // 空白
Boolean = 4, // 布尔型
Error = 5, // 错误
感觉基本常用的就是这些,需要用到其它接口可以直接查API。
今天也是把NPOI再复习一遍,写了一些基本的操作代码和上传设计。明天上传方法写好再继续贴出来分享给大家....
博主的基本思想是,对每一个excel模板都做一个对应的XML配置文件,里面是规则集。然后所有模板的excel上传均通过一个方法,解析数据与规则集,最后反射到DTO,再根据业务映射到不同实体,调用不同ADD服务入库
若果大家有比较好的其他开源的操作excel的组件,也欢迎指教。很久不做这一块,不太了解行情了...
原创文章,代码都是从自己项目里贴出来的(或者自己挨条整理的)。转载请注明出处哦,亲~~~
NPOI操作EXCEL(一)——npoi基础的更多相关文章
- NPOI操作Excel(一)--NPOI基础
用C#读取Excel的方法有很多中,由于近期工作需要,需要解析的Excel含有合并单元格以及背景色等特殊要求,故在网上查了一些关于读Excel的方法的优缺点,觉得NPOI能满足我的需要,所以搜索了一些 ...
- NPOI操作Excel辅助类
/// <summary> /// NPOI操作excel辅助类 /// </summary> public static class NPOIHelper { #region ...
- 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 ...
- C# 如何使用NPOI操作Excel以及读取合并单元格等
C#操作Excel方法有很多,以前用的需要电脑安装office才能用,但因为版权问题公司不允许安装office.所以改用NPOI进行Excel操作,基本上一些简单的Excel操作都没有问题,读写合并单 ...
- 用NPOI操作EXCEL-锁定列CreateFreezePane()
public void ExportPermissionRoleData(string search, int roleStatus) { var workbook = new HSSFWorkboo ...
- .NET 通过 NPOI 操作 Excel
目录 .NET 通过 NPOI 操作 Excel 第一步:通过 NuGet 获取 NPOI 包并引入程序集 第二步:引入 NPOI 帮助类 第三步:在程序中调用相应的方法对数据进行导出导入操作 将 D ...
- 2.6.2 用NPOI操作EXCEL--设置密码才可以修改单元格内容
2.6.2 用NPOI操作EXCEL--设置密码 有时,我们可能需要某些单元格只读,如在做模板时,模板中的数据是不能随意让别人改的.在Excel中,可以通过“审阅->保护工作表”来完 ...
- 使用NPOI操作Excel文件及其日期处理
工作中经常遇到需要读取或导出Excel文件的情况,而NPOI是目前最宜用.效率最高的操作的Office(不只是Excel哟)文件的组件,使用方便,不详细说明了. Excel工作表约定:整个Excel表 ...
随机推荐
- jquery定时滑出可最小化的底部提示层
效果预览:http://keleyi.com/keleyi/phtml/jqtexiao/index.htm当打开页面或者刷新页面后等待两秒钟,会在底部滑出可最小化的提示层.滑出层半透明,可关闭再现. ...
- 原生JS:delete、in、typeof、instanceof、void详解
delete.in.typeof.instanceof.void详解 本文参考MDN做的详细整理,方便大家参考[MDN](https://developer.mozilla.org/zh-CN/doc ...
- SharePoint 2013 工作流之使用Designer配置示例篇
在SharePoint 2013中,支持SharePoint Designer 2013(以下简称SPD)配置简单的工作流,完成我们的业务需要.下面,我们就举一个小例子,实现SPD配置工作流. 1. ...
- [DOM Event Learning] Section 3 jQuery事件处理基础 on(), off()和one()方法使用
[DOM Event Learning] Section 3 jQuery事件处理基础 on(),off()和one()方法使用 jQuery提供了简单的方法来向选择器(对应页面上的元素)绑定事件 ...
- java设计模式--策略模式
策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化. 本文地址:http:// ...
- IOS开发基础知识--碎片20
1:view中的clipsTobounds属性 iew2添加view1到中,如果view2大于view1,或者view2的坐标不全在view1的范围内,view2是盖着view1的,意思就是超出的部份 ...
- Java调优知识汇总
查看java进程运行状况jps -lvm 查看java默认堆大小 java -XX:+PrintFlagsFinal | grep MaxHeapSize eclipse调试设置vm参数 在项目上右键 ...
- Memcache学习整理
一.Memcache 是什么? 组成:程序进程管理.Socket 程序进程:Memcache把内存先分成几个大份,每一份分成多个小份.例如:小份中有5M...0.9M.0.8M.....0.1M,一份 ...
- [转载]java之yield(),sleep(),wait()区别详解
原文地址:http://dylanxu.iteye.com/blog/1322066 1.sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁 ...
- WinForm:DataGridView新增加行
1.不显示最下面的新行 通常 DataGridView 的最下面一行是用户新追加的行(行头显示 * ).如果不想让用户新追加行即不想显示该新行,可以将 DataGridView 对象的 AllowUs ...