最近接触了用c#导出Excel文件的一些操作。
使用NPOI的优势是,开源,操作灵活,不需要下载OFFICE软件,速度快,不过听说,数据量过大的时候,不是很好用,大概那都是几兆的时候吧,不过目前用于我的需要,基本是够了。
关于NPOI的基本操作:http://blog.csdn.net/pan_junbiao/article/details/39717443
使用Npoi需要using几个命名空间:
1 using NPOI; 2 using NPOI.HSSF.UserModel; 3 using NPOI.XSSF.UserModel; 4 using NPOI.XSSF.Util; 5 using NPOI.SS.UserModel; 6 using NPOI.SS.Util;
首先打开文件,需要文件路径,操作模式以及操作权限。
这里打开excel文件有两种对应格式,HSSFWorkbook和XSSFWorkbook,都是继承的IWorkbook。
GetSheet()函数,获取sheet名的方式,获取sheet来操作。
1 FileStream file = new FileStream(FileSer, FileMode.Open, FileAccess.Read);//读入excel模板 2 //HSSF适用2007以前的版本,XSSF适用2007版本及其以上的。 3 XSSFWorkbook UnionBook = new XSSFWorkbook(file); 4 XSSFSheet unionSheet = null; 5 unionSheet = (XSSFSheet)UnionBook.GetSheet("sheet1");
NPOI操作excel的方式,有两个特点:
1.它的操作,都是基于Excel的最小单文单元格来的,而且要先获取行getrow(int rownum),然后再获取该行的单元格,getcell(int cellnum)。
2.它的每次获取时,对行或单元格的操作,基于整个sheet,都是从0开始的。也就是要获取第一行的话,是getrow(0),获取第一个单元格的话,是getcell(0)。
按理说,用了XSSFSheet,应该用XSSFRow和XSSFCell的,不过GetRow方法返回的是IRow,所以只能用IRow定义了,ICell的情况也是一样的。
1 IRow unionRow = unionSheet.GetRow(0); 2 ICell unionCell = unionRow.GetCell(2);
3 unionCell.SetCellValue("第一个值");//设值
下面的函数,用于合并单元格的。
1 //CellRangeAddress四个参数为:起始行,结束行,起始列,结束列 2 unionSheet.AddMergedRegion(new CellRangeAddress(0, 0, 2, 6));
以上就是基本的操作,在下一节,我会针对我所遇到的问题,写出我的解决方案来的。