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表 ...
随机推荐
- cocos2d-x3.3 以前版本 工程Xcode6编译时的问题
Undefined symbols for architecture i386: "_fwrite$UNIX2003", referenced from: _unixErrorHa ...
- 关于float和margin
1.同级存在浮动,如mid的前面left浮动(mid不浮动),margin则相对于父元素,mid的margin-left不是相对于left,而是相对于con(可以想象,如果left不浮动,则mid和l ...
- CSS3动画属性Transform解读
无论你是前端还是设计师,相信你在网页二维空间上的操作早已经得心应手,JS处理时间线的动画也早已经 烂熟于胸.从今天开始,我跟大家分享一些“新”的东西,网页的第三个维度,以及纯CSS实现的动画.限于篇幅 ...
- Android—ZXing二维码扫描遇到的问题
最近工作中需要开发带有二维码扫描功能的软件(基于开源项目ZXing),遇到的问题记录一下,也希望给大家带来帮助. 1.首先因为扫描要开摄像机所以加权限是一定的,不然后面什么都不能进行 <uses ...
- iOS多线程实现3-GCD
原文链接:http://www.cnblogs.com/mddblog/p/4767559.html 敲下gcd三个字母,搜狗第一条显示居然是“滚床单” ^_^ 一.介绍 GCD,英文全称是Grand ...
- IOS 序列化与反序列化NSKeyedUnarchiver
开篇 1到底这个序列化有何作用? 面向对象的程序在运行的时候会创建一个复杂的对象图,经常要以二进制的方法序列化这个对象图,这个过程叫做Archiving. 二进制流可以通过网络或写入文件中. 当你写的 ...
- SqlHelper类
using System; using System.Collections; using System.Collections.Generic; using System.Data; using S ...
- 将ASP.NET Core应用程序部署至生产环境中(CentOS7)
这段时间在使用Rabbit RPC重构公司的一套系统(微信相关),而最近相关检验(逻辑测试.压力测试)已经完成,接近部署至线上生产环境从而捣鼓了ASP.NET Core应用程序在CentOS上的部署方 ...
- sublime3 集成angularJs插件
sublime是web开发中一款轻量级高效编辑器,十分适合前端开发(安装sublime是需要注册的,请支持正版) 1.安装sublime3(http://www.sublimetext.com/3) ...
- W3School-CSS 伪元素 (Pseudo-elements) 实例
CSS 伪元素 (Pseudo-elements)实例 CSS 实例 CSS 背景实例 CSS 文本实例 CSS 字体(font)实例 CSS 边框(border)实例 CSS 外边距 (margin ...