码迷,mamicode.com
首页 > 其他好文 > 详细

NPOI扩展之ENPOI(一)

时间:2015-12-31 19:12:26      阅读:309      评论:0      收藏:0      [点我收藏+]

标签:

NPOI是当前最流行的操作Excel的类库之一,而且不需要安装Excel,是一种非常实用的工具。

但在实际使用NPOI时,确实需要查找比较多的资料,存在以下问题:

1、使用时如果考虑周全,需要写较多的代码;

2、读/写单元格时,容易出现“未将对象引用到实例的问题”;

3、读取数据时,如果数据框中的数据是公式生成的,则读出来的是公式,而不是结果;

4、导入数据时,需要特别考虑Excel版本的问题;

5、读/写规范格式的Table时,不太实用;

针对以上问题,一般的操作可以使用ENPOI。ENPOI使用简单。下面简单介绍一下ENPOI的使用方法:

一、Excel操作类

ENPOI只有一个类,即ENPOI.Excel,该类有三个构造函数:

ENPOI.Excel e1 = new ENPOI.Excel(ENPOI.ExcelType.Xlsx);
ENPOI.Excel e2 = new ENPOI.Excel(@"D:\test.xls");
ENPOI.Excel e3 = new ENPOI.Excel(stream, ENPOI.ExcelType.Xlsx);

其中e1无模板构造函数,只需要告知需要创建的Excel版本,默认为xls

e2是有模板的构造函数,写入excel文件路径就可以了,自动识别excel版本

e3是模板来自于流,流可以是文件流,也可以是request的文件流,默认为xls的版本

二、写Excel

Excel写入很简单:

 ENPOI.Excel excel = new ENPOI.Excel();

excel.SetValue(0, 0, "So Easy");
excel.SetValue(0, 1, 1);

第一个参数为行号,第二个参数为列号,行号、列号起始为0。第三个参数为你要设置的值,该值可以为任意类型,将会自动识别。结果如下:

技术分享

如果需要写入公式,也很简单:

excel.SetValue(0, 1, 1); 
excel.SetValue(0, 2, 2);
excel.SetValue(0, 3, "B1+C1", true);

最后一个参数,指示插入的是公式。结果如下:

技术分享

三、读Excel

读取Excel与写Excel一样简单,并且会自动识别类型(除了datetime类型有时会读取成number,因为在Excel中datetime是保存成number类型,所以无法区分),公式不需要任何处理,读取出来的就是公式结果,而不是公式本身

var value = excel.ReadValue(0, 1);

第一个参数为行号,第二个参数为列号,第三个参数指代是否是时间格式(如果确认是读时间的,则设为true;如果确认不是读时间,则设为false,如果无法确认,则设成null或不填)

四、删除行与隐藏行

删除行只需要用到方法RemoveRow,隐藏行HiddenRow

excel.RemoveRow(0);  //删除第0行
excel.HiddenRow(1);  //隐藏第1行

五、合并单元格与解除合并

方法MergeCells用于合并单元格,UnMergeCells用于拆分单元格

excel.MergeCells(5, 5, 10, 10);   //从第5行第5列的单元格开始,合并到第10行第10列的单元格(矩行区域)
excel.UnMergeCells(5, 5);//解除第5行第5列的单元格合并

六、读取标准格式的Table为DataTabe或DataSet

如果标准的Table,需要导入,只需要一个方法就可以搞定

var dt = excel.GetDataTable();//读取当前Sheet的值为DataTable

看一下原始内容:

技术分享

看一下结果:

技术分享

如果需要读取特定的Sheet,则用以下方法:

var dt2 = excel.GetDataTableBySheet(0);//读取第一个sheet的数据为DataTable
var dt3 = excel.GetDataTableBySheet("sheet1");//读取Sheet名为sheet1的Sheet的数据为DataTable

如果需要把所有的Sheet读出来,则把数据放入到DataSet中去:

var dataset = excel.ReadAsDataSet();//把所有的Sheet的数据放入DataSet

 

这一次就写这么多,如果有什么不明白的地方,可以留言;想到什么也可以提出来;一起改进。

ENPOI下载地址如下:http://pan.baidu.com/s/1dEcWiFv

NPOI扩展之ENPOI(一)

标签:

原文地址:http://www.cnblogs.com/xiebin2013/p/5092459.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!