标签:
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
标签:
原文地址:http://www.cnblogs.com/xiebin2013/p/5092459.html