前言
Asp.net/C#操作Excel最惨的就是环境配置了;使用NPOI能够帮助开发者在没有安装微软Office的情况下读写Office 97-2003的文件,支持的文件格式包括xls, doc, ppt等。NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office的情况下对Word/Excel文档进行读写操作。
使用方法
先去官网:http://npoi.codeplex.com/下载需要引入dll(可以选择.net2.0或者.net4.0的dll),然后在网站中添加引用。
HSSF适用于2007之前的xls版本,XSSF适用于2007及其之后的xlsx版本。
引用组件
下为引用的解释
Assembly名称 | 模块/命名空间 | 说明 |
NPOI.DLL | NPOI.POIFS | OLE2/ActiveX文档属性读写库 |
NPOI.DLL | NPOI.DDF | 微软Office Drawing读写库 |
NPOI.DLL | NPOI.HPSF | OLE2/ActiveX文档读写库 |
NPOI.DLL | NPOI.HSSF | 微软Excel BIFF(Excel 97-2003, doc)格式读写库 |
NPOI.DLL | NPOI.SS | Excel公用接口及Excel公式计算引擎 |
NPOI.DLL | NPOI.Util | 基础类库,提供了很多实用功能,可用于其他读写文件格式项目的开发 |
NPOI.OOXML.DLL | NPOI.XSSF | Excel 2007(xlsx)格式读写库 |
NPOI.OOXML.DLL | NPOI.XWPF | Word 2007(docx)格式读写库 |
NPOI.OpenXml4Net.DLL | NPOI.OpenXml4Net | OpenXml底层zip包读写库 |
NPOI.OpenXmlFormats.DLL | NPOI.OpenXmlFormats | 微软Office OpenXml对象关系库 |
C#读取Excel方法:
using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; var path = @"C:UsersdaigaoDesktop新建Excel.xls"; IWorkbook workbook = null; try { using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read)) { if(path.IndexOf(".xlsx")>0) { workbook = new HSSFWorkbook(fs); } else if(path.IndexOf(".xls")>0) { workbook = new XSSFWorkbook(fs); } } ISheet sheet = workbook.GetSheetAt(0); var row = sheet.LastRowNum;//行数 var cell = sheet.GetRow(0).LastCellNum;//第一行有多少列 obdata= new object[row, cell]; for (int i = 0; i < row; i++) { for (int j = 0; j < cell; j++) { obdata[i, j] = sheet.GetRow(i).GetCell(j); } } } catch(Exception ex) { throw ex; }
C#保存EXcel方法:
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
IWorkbook workbook = new HSSFWorkbook();//创建Workbook对象(只能创建2007以前的版本.xls) ISheet sheet = workbook.CreateSheet("hdhd");//创建一个sheet表 HSSFCellStyle headerStyle = (HSSFCellStyle)workbook.CreateCellStyle(); //创建HSSFCellStyle对象(样式) headerStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;//表格内容居中 HSSFFont setFont = (HSSFFont)workbook.CreateFont();//创建HSSFFont对象(字体) setFont.FontName = "微软雅黑"; setFont.IsBold = true;//加粗 headerStyle.SetFont(setFont);//字体添加到样式中 HSSFCellStyle allStyle = (HSSFCellStyle)workbook.CreateCellStyle(); allStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; var rows = obdata.GetLength(0);//行数 var cells = obdata.GetLength(1);//列数 for (int i = 0; i < rows; i++)//行 { IRow row = sheet.CreateRow(i); for (int j = 0; j < cells; j++)//列 { row.CreateCell(j).SetCellValue(obdata[i,j].ToString());//在行中添加一列并设置列的内容 row.GetCell(j).CellStyle = allStyle;// 给第一行单元格添加样式 if (i==0) row.GetCell(j).CellStyle = headerStyle;// 给第一行单元格添加样式 } } SaveFileDialog dlgSave = new SaveFileDialog(); // 默认文件名 dlgSave.FileName = "新建Excel表格"; // 默认扩展名 dlgSave.DefaultExt = ".xls"; // 默认过滤器 dlgSave.Filter = "Excel表格 (.xls)|*.xls"; // 显示保存对话框 DialogResult result = dlgSave.ShowDialog(); if (result == DialogResult.OK) { string strFileName = dlgSave.FileName; // 实例化一个文件流 using (FileStream streamFile = new FileStream(strFileName, FileMode.Create)) { workbook.Write(streamFile); // 清空缓冲区、关闭流 streamFile.Flush(); streamFile.Close(); workbook = null; } }
NPOI 单元格套用公式:
1、获取公式注意激活模板自动公式
HSSFWorkbook hssfworkbook = new HSSFWorkbook(); ISheet sheet = hssfworkbook.CreateSheet("Sheet1"); hssfworkbook.CreateSheet("Sheet2"); hssfworkbook.CreateSheet("Sheet3"); //Title IRow row = sheet.CreateRow(0); //创建行对象 ICell cell = row.CreateCell(0); //创建单元格对象 int rIndx=1; cell.CellFormula = "F" + rIndx + "+G" + rIndx + "+H" + rIndx + "+I" + rIndx + "+J" + rIndx;//单元格公式为:=F1+G1+H1+I1+J1 cell.CellFormula="SUMIF(J6:J78,"语文",D6:D78)";//J列是语文的D列成绩汇总 //模板自动公式需要激活 sheet.ForceFormulaRecalculation = true;
保存方法也可参考:
http://blog.csdn.net/dcrmg/article/details/52356236